C 언어 기초
int a = -1;
unsigned int b = 1;
if (a < b)
printf("a < b\n");
else
printf("a >= b\n");int와 unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 결과로 올바른 것은?
- Aa < b가 표시된다
- Ba >= b가 표시된다
- C부호 있는 값과 부호 없는 값은 비교할 수 없으므로 컴파일 오류가 된다
정답과 해설 보기
정답: B. a >= b가 표시된다
int와 unsigned int를 비교할 때는 둘 다 unsigned int로 맞춘 뒤에 비교합니다(일반 산술 변환). −1은 unsigned int에서는 2³² − 1 = 4294967295가 되므로 1보다 크고, a < b는 거짓이 됩니다. 따라서 'a >= b'가 표시됩니다. 부호 있는 값과 부호 없는 값을 섞은 비교에는 gcc에서 -Wextra(또는 -Wsign-compare)를 붙이면 경고가 나옵니다.