C 언어 기초
int와 unsigned int는 32비트로 한다. 다음 중 C 언어 규격에서 미정의 동작이 되는 것은?
- Aunsigned int 변수의 값이 최댓값 4294967295일 때 1을 더한다
- Bint의 음수 값을 >>로 오른쪽으로 1비트 시프트한다
- Cint 변수의 값이 최댓값 2147483647일 때 1을 더한다
정답과 해설 보기
정답: C. int 변수의 값이 최댓값 2147483647일 때 1을 더한다
int의 2147483647 + 1처럼 부호 있는 정수 연산의 결과가 나타낼 수 있는 범위를 넘는 것은 미정의 동작입니다. 부호 없는 정수의 연산은 2³²로 나눈 나머지로 돌아간다고 정해져 있으므로, 4294967295 + 1은 0이 되며 미정의 동작이 아닙니다. 음수 값의 오른쪽 시프트는 산술 시프트가 될지 논리 시프트가 될지를 처리계가 정하는 처리계 정의 동작으로, gcc에서는 산술 시프트가 됩니다. 한편, 음수 값의 왼쪽 시프트는 미정의 동작입니다.