計算機算術
C言語で、32ビットの符号なし整数(unsigned int)の 0 から 1 を引いた結果はどれか。
- A−1
- B4294967295
- 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で止まる飽和はしません。