C 언어 기초

uint8_t x = 250;
for (int i = 0; i < 10; i++)
    x++;
printf("%d\n", x);

uint8_t는 8비트의 부호 없는 정수형이다. x를 10번 증가시키는 위의 코드를 실행했을 때의 출력으로 올바른 것은?

  1. A4
  2. B255
  3. C260
정답과 해설 보기

정답: A. 4

uint8_t로 나타낼 수 있는 것은 0~255입니다. 부호 없는 정수형에 들어가지 않는 값은 2⁸ = 256으로 나눈 나머지 값이 된다고 규격에 정해져 있으므로, 250에서 1씩 증가시키면 255 다음에는 0으로 돌아갑니다. 10번 증가시키면 250 + 10 = 260을 256으로 나눈 나머지인 4가 됩니다. 이에 비해 부호 있는 정수형의 계산에서 일어나는 오버플로는 미정의 동작입니다.

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

C 언어 기초의 다른 문제

  1. unsigned char는 8비트, int는 32비트로 한다. 위의 코드를 실행했을 때의 출력으로 올바른 것은?
  2. uint8_t는 8비트의 부호 없는 정수형, int는 32비트로 한다. 위의 코드를 실행했을 때의 결과로 올바른 것은?
  3. int와 unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 결과로 올바른 것은?
  4. unsigned int는 32비트로 한다. 위의 코드를 실행했을 때의 동작으로 올바른 것은?
  5. 'char c = 200;'으로 한 c를 printf의 %d로 표시하는 프로그램을 x86-64 Linux용 gcc로 컴파일하여 실행하면 −56, Arm Linux용 gcc에서는 200이 표시되었다. 차이가 생기는 이유로 올바른 것은?