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