C 언어 기초

unsigned char a = 200, b = 100;
int s = a + b;
unsigned char c = a + b;
printf("%d %d\n", s, c);

unsigned char는 8비트, int는 32비트로 한다. 위의 코드를 실행했을 때의 출력으로 올바른 것은?

  1. A44 44
  2. B300 44
  3. C300 300
정답과 해설 보기

정답: B. 300 44

C 언어에서는 int보다 작은 형(char나 short 등)의 값은 계산 전에 int로 변환됩니다(정수 승격). 따라서 a + b는 8비트가 아니라 int로 계산되어 300이 되고, int인 s에는 그대로 300이 들어갑니다. 8비트인 c에 대입할 때는 256으로 나눈 나머지인 44로 변환됩니다. 8비트 마이컴에서도 규격상으로는 식 도중의 계산이 int의 폭으로 이루어집니다.

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

C 언어 기초의 다른 문제

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