C 언어 기초
uint8_t a = 0x0F;
if (~a == 0xF0)
printf("equal\n");
else
printf("not equal\n");uint8_t는 8비트의 부호 없는 정수형, int는 32비트로 한다. 위의 코드를 실행했을 때의 결과로 올바른 것은?
- Aequal이 표시된다
- Buint8_t의 값에는 ~를 사용할 수 없으므로 컴파일 오류가 된다
- Cnot equal이 표시된다
정답과 해설 보기
정답: C. not equal이 표시된다
~a를 계산하기 전에 a는 정수 승격에 의해 int인 0x0000000F로 변환됩니다. 따라서 ~a는 8비트의 0xF0이 아니라 32비트의 0xFFFFFFF0(int로는 −16)이 되어, 0xF0(240)과 같지 않습니다. 8비트로 비교하고 싶은 경우에는 (uint8_t)~a == 0xF0처럼 8비트 형으로 되돌린 후에 비교합니다. 레지스터 값을 반전해서 비교하는 처리에서 일어나기 쉬운 실수입니다.