이번 산학 선생님과의 시간에서는 지금까지 배운 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" 입니다.
순서가 살짝 애매하게 됬는데, 생소한 연산자도 분명히 있을 것입니다. 다음 강의의 연산자 정리를 통해서 정리하도록 합시다!
'c언어' 카테고리의 다른 글
조건문이란, if문 (0) | 2019.07.05 |
---|---|
다양한 연산자 (0) | 2019.07.02 |
C언어 형식문자, 심화 (4) | 2019.07.02 |
비트, 논리, 비교연산 예제 (0) | 2019.06.30 |
비트, 비교, 논리 연산자 (0) | 2019.06.30 |