メインコンテンツへ
基礎理論数値表現・計算

8ビット2の補数表現で、正の数どうしの加算結果がオーバーフローしたと判定できる条件はどれか。

ア.演算結果の最上位ビット(符号ビット)が1になった正解
イ.演算結果のすべてのビットが0になった
ウ.演算結果に桁上がり(キャリー)が発生した
エ.演算結果の最下位ビットが1になった

解説

2の補数のオーバーフローは「エレベーターの定員オーバーランプ」みたいなもの。正の数どうしを足したのに結果がマイナス(符号ビット=1)になったら、それはランプが点灯したサイン。定員(表現範囲)を超えたのに気づかず乗り続けてしまった状態!

なぜ ア が正解か

8ビット2の補数で表現できる正の最大値は01111111(=127)。正の数どうしを加算して127を超えると、結果が10000000以上になり符号ビット(MSB)が1になる。2の補数ではMSB=1は負の数を意味するため、「正+正=負」という矛盾が起きたとき、それがオーバーフローの証拠。

なぜ イ は間違いか

すべてのビットが0になる(=0)は正当な演算結果の場合もある(例: 1+(-1)=0)。これ単体ではオーバーフロー判定にならない。

なぜ ウ は間違いか

キャリー発生はオーバーフローとは独立した概念。符号なし整数ではキャリー=オーバーフローだが、2の補数(符号あり)ではキャリーがあってもオーバーフローしない場合や、キャリーなしでもオーバーフローする場合がある。

なぜ エ は間違いか

最下位ビットが1かどうかは奇偶の話であり、オーバーフローとは無関係。

出典: AI生成問題(学習用)