01.증가연산자
#include <stdio.h>
int main( ) {
int a = 5, b = 6, c = 7;
c = (a++, ++b, a+b);
printf("%d, %d, %d\n", a, b, c);
return 0 ;
}
▶설명
*int a = 5, b = 6, c = 7;
정수형 변수 a,b,c가 5,6,7로 초기화된다.
*c = (a++, ++b, a+b);
a++ : 후위 증가 연산자. 값을 사용한 후 1 증가
++b : 전위 증가 연산자. 값을 사용하기 전 1 증가
%d는 정수 값을 출력하는 서식 지정자
02.조건연산자, 단락 평가(short- circuit evaluation)
#include <stdio.h>
int main( ) {
int a = 2, b = 5;
if(a++ <3 || ++b >3)
a++ ? a = a +1 : a + 2;
else
b__;
printf("%d, %d|m", a,b);
return 0 ;
}
▶설명
*형식
조건 ? 표현1 : 표현2 ;
조건이 참이면 표현1을 수행하고 거짓이면 표현2를 수행한다.
*if(a++ <3 || ++b >3)
a는 2이므로 a++<3은 true가 수행된다. ||의 좌항(a++<3)의 결과가 true이므로 우항 (++b>3)는 수행되지 않아 b는 5이다.
*a++ ? a = a +1 : a + 2;
a++는 true이므로 a=a+1이 수행된다.
*printf("%d, %d|m", a,b);
a값은 5:에서 1이 증가하고, 6:에서 1씩 두번 증가하므로 5가 출력된다. b는 초기값 그대로 5가 출력된다.
03.비트연산자
#include <stdio.h>
int main( ) {
char c = 3;
printf("%d\n", c << 1);
printf("%d\n", c << 2);
printf("%d\n", c << 3);
printf("%d\n", c << 4);
return 0;
}
▶설명
*>> : 비트 값을 우측으로 지정값 만큼 이동
(예: r = a>>3; 는 우측으로 3비트 이동(2^3으로 나눈 값)
*<< : 비트 값을 좌측으로 지정값 만큼 이동
(예: r = a << 3; 는 좌측으로 3비트 이동(2^3을 곱한 값)
*printf("%d\n", c << 1);
좌측으로 1비트 이동( 3x2^1 = 6)
*printf("%d\n", c << 2);
좌측으로 2비트 이동( 3x2^2 =12)
*printf("%d\n", c << 3);
좌측으로 3비트 이동( 3x2^3 = 24)
*printf("%d\n", c << 4);
좌측으로 4비트 이동( 3x2^4 = 48)
04. sizeof 연산자, 형 변환
#include <stdio.h>
int main( ) {
float a = 25.1f, b = 31.28f;
double c= 35.3, d = 24.4;
printf("[%d]", sizeof( a * b )) ;
printf("[%d]", sizeof( b * c )) ;
printf("[%d]", sizeof(11.1f * 1.32f)) ;
printf("[%d]", sizeof(13.2 * 84.4)) ;
printf("[%d]", sizeof(1.21f * 1.57)) ;
return 0 ;
}
▶설명
*sizeof( ) 연산자는 자료형, 변수, 수식의 결과 등이 차지하는 기억공간의 바이트 수를 구한다.
*printf("[%d]", sizeof( a * b )) ;
a와 b는 float형이므로 계산 결과도 float형이다. 따라서 4가 출력된다.
*printf("[%d]", sizeof( b * c )) ;
c와 d는 double형이므로 계산 결과도 double형이다. 따라서 8이 출력된다.
*printf("[%d]", sizeof(11.1f * 1.32f)) ;
11.1f * 1.32f의 결과는 float형이다. 따라서 4가 출력된다.
*printf("[%d]", sizeof(13.2 * 84.4)) ;
13.2 * 84.4는 두 피연산자 모두 double형이다. 따라서 연산 결과도 double형이므로 8이 출력된다.
*printf("[%d]", sizeof(1.21f * 1.57)) ;
1.2f * 1.57에서 1.57이 double이므로 확대 형 변환에 의해 결과는 double형이다. 따라서 8이 출력된다.
05. if문
#include <stdio.h>
int main( ) {
int x = 25, y = 10, z = 3;
y = y % x * z;
if (y == 20)
y = 30;
else
y = 40;
printf("%d", y);
return 0 ;
}
▶설명
형식
: if(조건식)
처리1
else
처리2
: if문 다음의 조건이 만족(참)이면 처리1을 수행하고, 만족하지 않으면 (거짓) 처리2를 수행한다.
*y = y % x * z; 의 결과는 30이다.
*y = 30;
*else
y = 40;
조건이 false이므로 else문을 수행한다. 따라서 y의 값은 40이 출력된다.
06.switch문
#include <stdio.h>
int main( ) {
int c = 100;
switch(9) {
case 0: c+= 2; break;
default : c = 0;
case 2: c+= 1;
case 8: c+= 2; break;
case 7: c = c +4;
}
printf("%d\n", c);
return 0;
}
▶설명
switch~case: switch문의 값과 일치하는 case문의 명령을 수행하고, 일치하는 값이 없으면 default의 명령을 수행한다. swich~case문을 빠져나오기 위해서 break문을 사용하는 데 case의 값에 해당하는 경우부터 break문이 있는 곳까지 수행한 후 swich 블록을 탈출한다.