문제
C언어에서 정수 변수 a, b에 각각 1, 2가 저장되어 있을 때 다음 식의 연산 결과로 옳은 것은?
① 0 ② 1 ③ 3 ④ 5
정답
2번
해설
정답: 2. a=1, b=2이고 연산자 우선순위는 산술(+) > 시프트(<<) > 관계(<, <=) > 논리(&&) 순이다. a < b+2 → 1 < 4 → 참(1), a<<1 <= b → (1<<1=2) <= 2 → 참(1)이므로 1 && 1 = 1이 된다.
오답 풀이
- 1번: 두 비교가 모두 참이라 결과는 0이 아니다.
- 2번: 참(1) && 참(1) = 1이므로 정답이다.
- 3번: 논리 연산 결과는 0 또는 1만 가지므로 3이 될 수 없다.
- 4번: 마찬가지로 5가 나올 수 없다.
보충 개념 C에서 시프트 연산(<<)은 관계 연산(<=)보다 우선순위가 높아 a<<1이 먼저 계산되며, 논리 AND(&&)의 결과는 항상 0 또는 1이다.