컴퓨터 산술

정수 x를 10배 하는 계산을 곱셈 명령을 쓰지 않고 시프트와 덧셈으로 수행하는 식으로 올바른 것은 무엇입니까?

  1. A(x << 3) + (x << 1)
  2. B(x << 10)
  3. C(x << 2) + x
정답과 해설 보기

정답: A. (x << 3) + (x << 1)

왼쪽으로 1비트 이동하면 2배가 되므로 x << 3은 8배, x << 1은 2배입니다. 8x + 2x = 10x이므로 (x << 3) + (x << 1)로 10배를 계산할 수 있습니다. 상수를 곱하는 곱셈은 이처럼 시프트와 덧셈의 조합으로 바꿀 수 있고, 컴파일러도 빠른 쪽을 골라 사용합니다. x << 10은 2¹⁰ = 1024배, (x << 2) + x는 4x + x = 5배가 됩니다. 시프트 비트 수를 10배와 혼동하지 않도록 주의해야 합니다.

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

컴퓨터 산술의 다른 문제

  1. 일반적인 정수 제산기(1비트씩 몫을 구하는 복원형·비복원형 등)가 승산기보다 느려지기 쉬운 이유로 올바른 것은 무엇입니까?
  2. 8비트 부호 있는 정수에서 −8(1111 1000)을 산술 오른쪽 시프트로 1비트 오른쪽으로 이동한 결과는 무엇입니까?
  3. C 언어에서 int형의 −7 / 2와 −7 >> 1(산술 오른쪽 시프트인 경우)의 결과 조합으로 올바른 것은 무엇입니까?
  4. C 언어에서 32비트 부호 없는 정수(unsigned int)의 0에서 1을 뺀 결과는 무엇입니까?
  5. 부호 없는 정수끼리의 덧셈에서 결과가 표현 가능한 범위를 넘은(오버플로한) 것을 판정하는 방법으로 올바른 것은 무엇입니까?