C 언어 기초

int a = -1;
unsigned int b = 1;
if (a < b)
    printf("a < b\n");
else
    printf("a >= b\n");

int와 unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 결과로 올바른 것은?

  1. Aa < b가 표시된다
  2. Ba >= b가 표시된다
  3. C부호 있는 값과 부호 없는 값은 비교할 수 없으므로 컴파일 오류가 된다
정답과 해설 보기

정답: B. a >= b가 표시된다

int와 unsigned int를 비교할 때는 둘 다 unsigned int로 맞춘 뒤에 비교합니다(일반 산술 변환). −1은 unsigned int에서는 2³² − 1 = 4294967295가 되므로 1보다 크고, a < b는 거짓이 됩니다. 따라서 'a >= b'가 표시됩니다. 부호 있는 값과 부호 없는 값을 섞은 비교에는 gcc에서 -Wextra(또는 -Wsign-compare)를 붙이면 경고가 나옵니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 동작으로 올바른 것은?
  2. 'char c = 200;'으로 한 c를 printf의 %d로 표시하는 프로그램을 x86-64 Linux용 gcc로 컴파일하여 실행하면 −56, Arm Linux용 gcc에서는 200이 표시되었다. 차이가 생기는 이유로 올바른 것은?
  3. &&와 ||의 오른쪽에 b++를 쓴 위의 코드를 실행했을 때의 출력으로 올바른 것은?
  4. break가 없는 case를 포함하는 위의 switch 문을 실행했을 때의 출력으로 올바른 것은?
  5. 위의 프로그램을 실행했을 때의 출력으로 올바른 것은?