10

これは私たちがクラスのために与えられた図です:

ここに画像の説明を入力してください

この画像でC4を使用しないのはなぜですか?C4が1の場合、最後の追加でオーバーフローが発生しました。これが私たちが疑問に思っていることです。なぜC3を見る必要があるのですか?

4

3 に答える 3

9

オーバーフロー フラグは、符号付き演算のオーバーフロー状態を示します。

署名付き操作で覚えておくべきいくつかのポイント:

  • MSB は、数値の符号を示すために常に予約されています
  • 負の数は 2 の補数で表されます
  • オーバーフローにより無効な操作が発生する

2 の補数のオーバーフロー規則:

  • 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 の補数形式と見なすことができます符号付き演算では、オーバーフロー フラグが監視され、キャリー フラグは無視されます。同様に、符号なし演算では、キャリー フラグが監視され、オーバーフロー フラグは無視されます。

于 2013-02-03T14:56:32.183 に答える
2

符号付き数値のオーバーフローは、最上位ビットへのキャリーインがキャリーアウトと等しくない場合に発生します。

たとえば、8 ビット、65 + 64 = 129 を使用すると、実際にはオーバーフローが発生します。これは、これがバイナリで 1000 0001 であり、2 の補数で -127 であるためです。この例を実行すると、キャリーアウトがキャリーインと等しくない結果であることがわかります。

キャリー フラグが高い場合でも、正しい計算を行うことができます。

検討

  1000 1000   = -120
+ 1111 1111   = -1

=(1) 10000111 = -121 

1 のキャリー アウトがありますが、オーバーフローはありません。

于 2013-07-16T13:53:05.723 に答える