在这些情况下是否会发生溢出?

Does overflow occur in any of these cases?

使用6-bit二进制补码运算,在这些情况下是否会发生溢出?我相信有进位问题 b,但没有溢出。

(a) 11001 + 01000
(b) 10111 – 00110
(c) 00111 + 01100
(d) 10110 + 00011

我之所以说 b 是一个进位而不是溢出的例子,是因为即使有一个进位位,结果也是两个数字相加的相同符号。

另外,结果可能大于字号所能容纳的大小 正在使用。这种情况称为溢出

在我们的例子中,我们使用 6 位算法,因此我们可以表示从 -32 (100000) 到 + 31 (011111) 的数字。

如果两个数以二进制补码相加,一个为正,另一个为负,永远不会出现溢出。结果将是操作数范围内的数字。

所以根据你的书,我们有第 314 页的溢出规则

If two numbers are added, and they are both positive or both negative, then overflow occurs if and only if the result has the opposite sign.

让我们看看所有的项目:

(a) carry-out but no overflow

  111001    -7
+ 001000    +8
  ------    --
 1000001    +1
(b) carry-out but no overflow

  110111     -9
+ 111000     -6
  ------    ---
 1101111    -17

这里我们必须首先使用减法规则,第 315 页。

To subtract one number (subtrahend) from another (minuend), take the twos complement (negation) of the subtrahend and add it to the minuend.

(c) no carry-out, no overflow

  000111     +7
+ 001100    +12
  ------    ---
  010011    +19
(d) no carry-out, no overflow

  110110    -10
+ 000011     +3
  ------    ---
  111001     -7

注意,在(a)(b)中,字末尾有一个进位被忽略