メインコンテンツへ
基礎理論

符号付き8ビット整数(2の補数表現)の加算において、桁あふれ(オーバーフロー)が発生したと判定するための条件として正しいものはどれか。

ア.演算結果の最上位ビット(符号ビット)が1になったとき
イ.2つのオペランドの符号ビットが同じで、演算結果の符号ビットが異なるとき正解
ウ.演算結果に桁上がり(キャリー)が発生したとき
エ.2つのオペランドの符号ビットが異なるとき

解説

オーバーフローは「同じ符号どうしを足したのに符号が変わってしまった」瞬間に起きる。正+正=負になれば明らかにおかしい!

なぜ イ が正解か

2の補数加算でオーバーフローが起きる条件は「両オペランドの符号ビット(MSB)が同じ、かつ結果の符号ビットが異なる」場合。例: (+64)+(+65)=0100_0000+0100_0001=1000_0001=−127(符号が正→負に反転)→オーバーフロー。逆に異符号の加算ではオーバーフローは絶対に起きない。

なぜ ア は間違いか

結果のMSBが1になっても負の数として正常な場合もある。例: (−1)+(−1)=正常に−2。MSBだけでは判定できない。

なぜ ウ は間違いか

キャリーはオーバーフローと別概念。符号なし整数ではキャリーが桁あふれだが、2の補数符号付き整数では正しい加算でもキャリーが出ることがある。

なぜ エ は間違いか

符号ビットが異なる(+と−)ならオーバーフローは起きない。絶対値が減るかどうかの問題なので範囲を超えることができない。

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