컴퓨터 산술
C 언어에서 int형의 −7 / 2와 −7 >> 1(산술 오른쪽 시프트인 경우)의 결과 조합으로 올바른 것은 무엇입니까?
- A−7 / 2는 −3, −7 >> 1은 −4
- B둘 다 −4
- C−7 / 2는 −4, −7 >> 1은 −3
정답과 해설 보기
정답: A. −7 / 2는 −3, −7 >> 1은 −4
C 언어(C99 이후)의 정수 나눗셈은 결과를 0 방향으로 버리도록 정해져 있으므로 −3.5는 −3이 됩니다. 한편 산술 오른쪽 시프트는 작은 쪽(음의 무한대 방향)으로 버리는 동작이 되어, −7(1111 1001)을 오른쪽으로 1비트 이동하면 1111 1100 = −4가 됩니다. 그래서 음수에서는 시프트와 나눗셈이 일치하지 않습니다. 컴파일러가 2로의 나눗셈을 시프트로 바꿀 때는 음수를 위한 보정 명령을 추가합니다. 양수라면 둘은 일치합니다.