1 の補数システムでは、負の 2 進数を表示するために、各ビットを単純に補数します。例: +3= 0011、-3= 1100
2 の補数系では桁上げビットでオーバーフローを検出しますが、1 の補数ではどうでしょうか。
1 の補数システムでは、負の 2 進数を表示するために、各ビットを単純に補数します。例: +3= 0011、-3= 1100
2 の補数系では桁上げビットでオーバーフローを検出しますが、1 の補数ではどうでしょうか。
2 の補数の合計でオーバーフローを検出するためのルールは単純です。
加算は 2 の補数と同じですが、最後のキャリーを破棄する代わりに、一番右の位置で n ビットの合計に加算される点が異なります (「エンドアラウンド」キャリー)。次の例を見てください。
Pos + Neg numbers, Neg > Pos
+5 0101
-6 1001
-1 1110 (correct answer)
符号が異なり、オーバーフローは発生しません。
Pos + Neg numbers, Pos > Neg
-5 1010
+6 0110
(1) 0000
1 (end-around carry)
+1 0001 (correct; no overflow)
エンドアラウンドキャリーが発生しますが、オーバーフローはありません
-3 1100
-4 1011
(1) 0111
1 (end-around carry)
-7 1000 (correct; no overflow)
|sum| である負の数 <= 2^(n-1)
-5 1010
-6 1001
(1) 0011
1 (end-around carry)
0100 (wrong answer; overflow)
|sum| である負の数 > 2^(n-1)。さらに、両方とも同じような符号を持ち、結果は異なる符号を持ちます。