これは私たちがクラスのために与えられた図です:
この画像でC4を使用しないのはなぜですか?C4が1の場合、最後の追加でオーバーフローが発生しました。これが私たちが疑問に思っていることです。なぜC3を見る必要があるのですか?
これは私たちがクラスのために与えられた図です:
この画像でC4を使用しないのはなぜですか?C4が1の場合、最後の追加でオーバーフローが発生しました。これが私たちが疑問に思っていることです。なぜC3を見る必要があるのですか?
オーバーフロー フラグは、符号付き演算のオーバーフロー状態を示します。
署名付き操作で覚えておくべきいくつかのポイント:
- 2 つの正の数値の合計が負の結果になる場合、合計はオーバーフローしています。
- 2 つの負の数値の合計が正の結果になる場合、合計はオーバーフローしています。
- それ以外の場合、合計はオーバーフローしていません。
例えば:
**Ex1:**
0111 (carry)
0101 ( 5)
+ 0011 ( 3)
==================
1000 ( 8) ;invalid (V=1) (C3=1) (C4=0)
**Ex2:**
1011 (carry)
1001 (-7)
+ 1011 (−5)
==================
0100 ( 4) ;invalid (V=1) (C3=0) (C4=1)
**Ex3:**
1110 (carry)
0111 ( 7)
+ 1110 (−2)
==================
0101 ( 5) ;valid (V=0) (C3=1) (C4=1)
符号付き演算では、左端の 2 つのキャリー ビット (これらの例では一番上の行の左端にあるビット) が両方とも 1 または両方とも 0 の場合、結果は有効です。左側の 2 つのキャリー ビットが "1 0" または "0 1" の場合、符号オーバーフローが発生しています。便利なことに、これらの 2 つのビットに対するXOR演算により、オーバーフロー状態が存在するかどうかをすばやく判断できます。(参照: 2 の補数)
オーバーフローとキャリー:オーバーフローはキャリーの 2 の補数形式と見なすことができます。符号付き演算では、オーバーフロー フラグが監視され、キャリー フラグは無視されます。同様に、符号なし演算では、キャリー フラグが監視され、オーバーフロー フラグは無視されます。
符号付き数値のオーバーフローは、最上位ビットへのキャリーインがキャリーアウトと等しくない場合に発生します。
たとえば、8 ビット、65 + 64 = 129 を使用すると、実際にはオーバーフローが発生します。これは、これがバイナリで 1000 0001 であり、2 の補数で -127 であるためです。この例を実行すると、キャリーアウトがキャリーインと等しくない結果であることがわかります。
キャリー フラグが高い場合でも、正しい計算を行うことができます。
検討
1000 1000 = -120
+ 1111 1111 = -1
=(1) 10000111 = -121
1 のキャリー アウトがありますが、オーバーフローはありません。