コンテキスト
教科書で読んだ...
加算と減算でオーバーフローが発生することはありません。引用すると、
「一方の数値が正で、もう一方の数値が負の場合、加算後にオーバーフローが発生することはありません。正の数値を負の数値に加算すると、大きさが小さくなる結果が生成されるためです(...)」.
しかし、いくつかの問題を経て、そうではないように見えたので、私が計算したものが間違いではないことを確認したいと思います.
たとえば、これが適用されるコンテキストでは、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.
この問題を実行しただけで、すでにいくつかの疑問が生じます。
- オーバーフローがないにもかかわらず、オーバーフロー ビットが設定されている (数値が範囲内にある)
- 範囲が -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 フラグ) の関係はどうなるでしょうか?