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

Binary 在这些情况下是否会发生溢出?,binary,integer-overflow,twos-complement,Binary,Integer Overflow,Twos Complement,使用6位two的补码算法,在这些情况下是否会发生溢出?我相信有一个进位问题b,但没有溢出 (a) 11001 + 01000 (b) 10111 – 00110 (c) 00111 + 01100 (d) 10110 + 00011 我之所以说b是进位而不是溢出的一个例子,是因为结果是两个数字相加的符号相同,即使有进位。在相加时,结果可能大于字大小 正在使用中。这种情况称为溢出 在我们的例子中,我们使用6位算术,因此我们可以表示从-32(100000)到+31(011111)的数字 如果两个数

使用
6位
two的补码算法,在这些情况下是否会发生溢出?我相信有一个进位问题
b
,但没有溢出

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

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

在相加时,结果可能大于字大小 正在使用中。这种情况称为溢出

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

如果两个数字加在二的补码中,一个是正的,另一个是负的,就永远不会有溢出。结果将是操作数范围内的数字

根据你的书,我们有溢出规则,在314页

如果两个数字相加,并且它们都是正数或负数,则当且仅当结果具有相反符号时,才会发生溢出

让我们看看所有的项目:

(a) carry-out but no overflow

  111001    -7
+ 001000    +8
  ------    --
 1000001    +1
在这里,我们必须首先使用第315页的减法规则

要将一个数字(减数)与另一个(减数)相减,请将减数的两个补数(否定)相加到减数


请注意,在
(a)
(b)
中,单词末尾有一个进位,它被忽略。

您是指5位还是6位算术?因为你在问题中说
6位
,但你的例子是5位,所以它们都是正数,我的意思是6。当您想增加二进制补码中的位长度时,可以将符号位移到最左边的位置,并用符号位的副本填充。对于正数,用零填充,对于负数,用1填充。这称为符号扩展。符号不会改变。如果您在从xxx11x表格的任何数字中减去00110时发现进位,您可能做错了。啊,但我不是在减去;-)。我所做的是将001100转换成6位的两个补码,然后加上。i、 e.110111+111010如果你发现一个进位,你仍然在做错事。xxx11x-000110是xxx00x,不带进位。注:110111是错误的,也许你没有正确应用“符号扩展”。这正是我的想法。这个问题一定有错误。我想我们应该用5位而不是6位
(b) carry-out but no overflow

  110111     -9
+ 111000     -6
  ------    ---
 1101111    -17
(c) no carry-out, no overflow

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

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