二進法オーバーフロー:符号ビットが二進法加算に与える影響
符号付き二進数を扱うとき、加算や減算の結果が、固定ビット数で表現可能な大きさを超えることがあります。この現象をオーバーフローと呼び、符号ビットの位置が計算開始時に固定されているために起こります。
以下の例では、大きさを表す5ビットと、最左(第6)ビットを符号ビットとして使用します。5ビットの大きさで 2⁵ = 32 通りの整数値を表現可能で、0から最大大きさまでです。したがって、表現可能な最大の正の数は +31₁₀(011111₂)、最小は −32₁₀(100000₂)です。
6ビット数値フィールドの制約
同じ6ビットフィールドを使用する2つの二進数を加算すると、結果が −32 〜 +31 の範囲外に出ることがあります。例えば、+17₁₀ と +19₁₀ を加算すると真の和は +36₁₀ ですが、5ビットの大きさでは表現できません。

二進法の答え 100100₂ は、第6ビットを −32₁₀ として解釈すると −28₁₀ となります。これは明らかに間違いです;真の和が6ビットフィールドの限界を超えるためオーバーフローエラーが発生します。左端の「繰り上げ」ビットを破棄すると誤った結果になります。
2つの負の数を加算しても同様の問題が起こります。−17₁₀ + −19₁₀ は −36₁₀ になるべきですが、6ビットフィールドでは正の28という結果になり、再びオーバーフローを示します。

第7ビットを符号ビットとして使用
フィールドを7ビットに拡張——大きさ6ビット、符号1ビット——すると、より大きな和を扱えます。以下の図は、フィールドが十分広いときに同じ問題が解決される様子を示します。

オーバーフローは、二進結果を十進法に戻して検出できますが、このアプローチは煩雑で電子回路には非現実的です。より効率的な方法は、和の符号に依存します。同じ符号を持つ2つの数を加算して、相反する符号の結果が出ればオーバーフローが発生しています。フィールドが十分であれば、2つの正の数の和が負になることはなく、2つの負の和が正になることもありません。
逆に、正と負の数を加算する場合、オーバーフローは決して起こりません。結果の和は常にどちらのオペランドよりもゼロに近いため、表現可能な範囲内に留まります。
これらのオーバーフロー検出ルールはデジタル加算器に実装され、コンピュータ算術の基礎概念となっています。
関連ワークシート:
- 二進法数学ワークシート
産業技術