컴퓨터 산술

C 언어에서 32비트 부호 없는 정수(unsigned int)의 0에서 1을 뺀 결과는 무엇입니까?

  1. A−1
  2. B4294967295
  3. C0 그대로 변하지 않는다
정답과 해설 보기

정답: B. 4294967295

부호 없는 정수에는 음수가 없으며, C 언어에서는 결과를 2³²으로 나눈 나머지로 취급(랩어라운드)하도록 정해져 있습니다. 0 − 1은 2³² − 1 = 4294967295가 되며 비트열은 모두 1입니다. 이 때문에 「i가 0이 될 때까지 1씩 줄이는」 루프를 부호 없는 변수로 i >= 0이라고 쓰면 조건이 항상 참이 되어 끝나지 않게 됩니다. 부호 없는 수로는 −1을 나타낼 수 없고, 0에서 멈추는(포화되는) 것도 아닙니다.

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

컴퓨터 산술의 다른 문제

  1. 부호 없는 정수끼리의 덧셈에서 결과가 표현 가능한 범위를 넘은(오버플로한) 것을 판정하는 방법으로 올바른 것은 무엇입니까?
  2. 부동소수점수에서 인접한 표현 가능한 값끼리의 간격에 대한 설명으로 올바른 것은 무엇입니까?
  3. IEEE 754 단정밀도 부동소수점수에서 0부터 시작하여 모든 정수를 정확히 나타낼 수 있는 상한은 무엇입니까?
  4. 금액 계산에서 2진수 부동소수점수가 아니라 최소 단위(1엔이나 1센트)를 1로 하는 정수로 다루는 경우가 많은 주된 이유는 무엇입니까?
  5. AI 혼합 정밀도 학습에서 계산의 대부분을 FP16이나 bfloat16으로 수행하면서 가중치의 원래 값(마스터 가중치)을 FP32로 유지해 두는 주된 이유는 무엇입니까?