c언어

산술연산자 응용

도솔비 2019. 7. 2. 21:05

 이번 산학 선생님과의 시간에서는 지금까지 배운 c언어의 연산자를 이용해서 코드를 읽고 출력결과를 맞추는 문제를 풀었습니다. 얼마나 지금까지의 학습내용을 이해했는지 테스트 해보는 시간이였는데요. 아래 문제를 보고 한번 결과를 다시한번 맞춰봅시다.


문제 1>

int n = 2; 
int m = 2; 
printf("%d %d\n", n++, m--); 
printf("%d %d\n", n, m);

단항 증감 연산자에서 전위식과 후위식의 차이를 묻는 문제였네요. 답은 "2 2 \n 3 1" 이였습니다.

 

문제2>

int a= 3, b; 
b= ++a; 
printf("%d\n", b); 
b= a++; 
printf("%d\n", b);

후위식은 단순대입연산자보다 우선순위가 늦다는 걸 알면 끝입니다. 답은 "4 \n 4" 였습니다.

 

문제3>

int p= 2, q= 3, r= 4; 
int s= p+ q++ * r; 
printf("%d\n", s);

복잡한 연산자의 중첩도 우선순위를 따져가면 풀립니다. 힌트는 단항연산자가 다항연산자보다 보통 우선순위가 빠르지만, 후위식은 예외라는 것이겠네요. 답은 "14" 입니다.

 

문제4>

int x=2, y=3, z=4; 
z= ++x + z--; 
printf("%d %d %d\n", x, y, z); 
z= x= y--; 
printf("%d %d %d\n", x, y, z); 
x*= y + 2; 
printf("%d %d %d\n", x, y, z); 
z= ++x == y; 
printf("%d %d %d\n", x, y, z);

복합대입연산자 기억나죠? 답은 "3, 3, 7 \n 3, 2, 3 \n 12, 2, 3 \n 13, 2, 0" 입니다.

 

문제5>

printf("%d\n", 5 % (-3)); 
printf("%d\n", (-5) % 3); 
printf("%d\n", (-5) % (-3));

정수와 정수의 연산은 항상 정수, 나머지를 구하는 문제니 나누어지는 수의 부호가 그대로 결과에 붙는 다는 것이 큰 힌트 입니다. 답은 "2, -2, -2" 입니다.

 

문제6>

printf("%d\n", 1 && 1); 
printf("%d\n", 1 && 0); 
printf("%d\n", 0 && 1); 
printf("%d\n", 0 && 0); 
printf("%d\n", 2 && 3);

논리연산자는 0이 아닌값을 1, 0이면 0으로 해서 &&니까 AND연산하는 점을 기억합시다. 답은 "1 \n 0 \n 0 \n 0 \n 2" 입니다.

 

문제7> 

int num1 = 131;
int num2 = -125;
int num3, num4;
num3 = num1 >> 5;
num4 = num2 >> 5;
printf("%d\n%d", num3, num4);

쉬프트 연산은 <<(수)는 *2^(수)와 같다는 걸 생각하고 있으면 됩니다. 답은 "4 \n -4" 입니다.


순서가 살짝 애매하게 됬는데, 생소한 연산자도 분명히 있을 것입니다. 다음 강의의 연산자 정리를 통해서 정리하도록 합시다!