計算機算術

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のまま止まる(飽和する)わけでもありません。

  • A. 符号なし整数は負の数を表せません。
  • B. 正しい。2³² − 1 = 4294967295に回り込みます。
  • C. 0で止まる飽和はしません。
この分野を解く 分野ページへ

計算機算術のほかの問題

  1. 符号なしの整数どうしの足し算で、結果が表せる範囲を超えた(桁あふれした)ことを判定する方法として正しいものはどれか。
  2. 浮動小数点数で、隣り合う表せる値どうしの間隔についての説明として正しいものはどれか。
  3. IEEE 754の単精度の浮動小数点数で、0から始めてすべての整数を正確に表せる上限はどれか。
  4. 金額の計算で、2進数の浮動小数点数ではなく、最小の単位(1円や1セント)を1とする整数で扱うことが多い主な理由はどれか。
  5. AIの混合精度の学習で、計算の多くをFP16やbfloat16で行いながら、重みの元の値(マスターウェイト)をFP32で保持しておく主な理由はどれか。