0

1 の補数システムでは、負の 2 進数を表示するために、各ビットを単純に補数します。例: +3= 0011、-3= 1100

2 の補数系では桁上げビットでオーバーフローを検出しますが、1 の補数ではどうでしょうか。

4

2 に答える 2

3

2 の補数の合計でオーバーフローを検出するためのルールは単純です。

  1. 2 つの正の数値の合計が負の結果になる場合、合計はオーバーフローしています。
  2. 2 つの負の数値の合計が正の結果になる場合、合計はオーバーフローしています。
  3. それ以外の場合、合計はオーバーフローしていません。

加算は 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)。さらに、両方とも同じような符号を持ち、結果は異なる符号を持ちます。

于 2015-12-21T10:23:07.733 に答える