문제
다음 C 코드의 출력 결과로 가장 적절한 것은?
C#include <stdio.h> int main() { int x = 7, y = 4, z; z = y % 3 < 3 ? 2 : 1; z = z & z >> 1; z = x > 5 && z <= 3 ? z * x : z / x; printf("%d", z); return 0; }
① 0 ② 1 ③ 7 ④ 14
정답
1번
해설
정답: 1. y%3은 1이고 1<3이 참이므로 z=2이다. z & z >> 1은 2 & 1이므로 0이다. 마지막 조건은 참이지만 z*x가 0이므로 0이 출력된다.
오답 풀이
- 1번: 비트 연산과 삼항 연산 결과가 맞다.
- 2번: 2 & 1을 1로 잘못 계산한 값이다.
- 3번: z를 1로 보고 x를 곱한 값이다.
- 4번: 첫 번째 z=2에 x를 곱한 값이다.
보충 개념
시프트 연산 >>가 &보다 우선순위가 높다. 따라서 z & z >> 1은 z & (z >> 1)로 계산된다.