2

コンテキスト

教科書で読んだ...

加算と減算でオーバーフローが発生することはありません。引用すると、

「一方の数値が正で、もう一方の数値が負の場合、加算後にオーバーフローが発生することはありません。正の数値を負の数値に加算すると、大きさが小さくなる結果が生成されるためです(...)」.

しかし、いくつかの問題を経て、そうではないように見えたので、私が計算したものが間違いではないことを確認したいと思います.

たとえば、これが適用されるコンテキストでは、M=1 (これは B による減算を意味します) の 4 ビット加減算器の場合、A = 0101 (+5) および B = 1010 (+10) になります。

B = 0110 (-10) の 2 の補数を取り、数値を加算することにより、減算を行うことができます。

例: (5)+(-10)

      0 1
+5      0101
-10     0110
-------------
result: 1011
results 2s: 0101 (-5)
C: 0 and V = 1.

この問題を実行しただけで、すでにいくつかの疑問が生じます。

  1. オーバーフローがないにもかかわらず、オーバーフロー ビットが設定されている (数値が範囲内にある)
  2. 範囲が -8 から 7 の場合、符号付き整数と符号なし整数もオーバーフローを引き起こしません (-1+9)

例えば

-1      1110
+9      1001
-------------
result: 1111
result 2s:    0001 (1)

C: 1 and V: 1

C = 0 の場合はオーバーフローがなく、C = 1 の場合はオーバーフローがあることに気付きました。

2 つの符号なし整数間のオーバーフロー関係が V オーバーフロー フラグであることを読みました。一方、2 つの符号付き整数間のオーバーフロー関係は、C キャリー フラグに関連しています。これは関連している可能性がありますか?

最後に、引用したステートメントが矛盾しているにもかかわらず、符号なし整数と符号付き整数の間にオーバーフローがあることに注意してください。

TL;DR

符号なし整数と符号付き整数の加算の間のオーバーフローは可能ですか? もしそうなら、符号なし整数と符号付き整数のオーバーフロー (C または V フラグ) の関係はどうなるでしょうか?

4

2 に答える 2