컴퓨터 산술

C 언어에서 int형의 −7 / 2와 −7 >> 1(산술 오른쪽 시프트인 경우)의 결과 조합으로 올바른 것은 무엇입니까?

  1. A−7 / 2는 −3, −7 >> 1은 −4
  2. B둘 다 −4
  3. 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로의 나눗셈을 시프트로 바꿀 때는 음수를 위한 보정 명령을 추가합니다. 양수라면 둘은 일치합니다.

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

컴퓨터 산술의 다른 문제

  1. C 언어에서 32비트 부호 없는 정수(unsigned int)의 0에서 1을 뺀 결과는 무엇입니까?
  2. 부호 없는 정수끼리의 덧셈에서 결과가 표현 가능한 범위를 넘은(오버플로한) 것을 판정하는 방법으로 올바른 것은 무엇입니까?
  3. 부동소수점수에서 인접한 표현 가능한 값끼리의 간격에 대한 설명으로 올바른 것은 무엇입니까?
  4. IEEE 754 단정밀도 부동소수점수에서 0부터 시작하여 모든 정수를 정확히 나타낼 수 있는 상한은 무엇입니까?
  5. 금액 계산에서 2진수 부동소수점수가 아니라 최소 단위(1엔이나 1센트)를 1로 하는 정수로 다루는 경우가 많은 주된 이유는 무엇입니까?