C 언어 기초
unsigned int reg = 0x04;
if (reg & 0x04 == 0x04)
printf("ON\n");
else
printf("OFF\n");레지스터 값 reg의 비트 2가 1인지를 조사할 생각으로 위의 코드를 작성했다. 실행했을 때의 결과로 올바른 것은?
- AON이 표시된다
- BOFF가 표시된다
- C&와 ==를 이어서 쓸 수는 없으므로 컴파일 오류가 된다
정답과 해설 보기
정답: B. OFF가 표시된다
C 언어에서는 비교 연산자 ==가 비트 단위 논리곱인 &보다 우선순위가 높습니다. 따라서 조건은 reg & (0x04 == 0x04)로 해석되고, 0x04 == 0x04가 1이 되므로 0x04 & 1 = 0으로 거짓이 되어 OFF가 표시됩니다. 의도대로 하려면 (reg & 0x04) == 0x04처럼 괄호를 붙입니다. 문법상으로는 올바르므로 오류는 되지 않지만, gcc의 -Wall에서는 경고가 나옵니다.