例如,对于8位数字。 我为什么要放弃这个? 我明白溢出只是当我在同一个符号中添加2个数字并在另一个符号中得到结果时。这里的情况是什么?
答案 0 :(得分:6)
你不会希望丢弃它,但通常你拥有,因为字大小有限,你不能使用更大的数字。这就是为什么在添加之后将进位位设置的许多语言被视为溢出错误的原因。
答案 1 :(得分:4)
如果使用无符号字节,则第一个数字(0101.1101)为93,第二个数字(1101.1011)为219.结果312太大而不适合(8位)整数。除了使用更多位之外没有办法解决这个问题,例如16,结果1.0011.1000有一个表示。
如果您使用的是有符号字节,则第一个数字保持为93,但第二个数字为-37。所以结果应该是56,这是正确的没有前导1.因此,在这种情况下忽略溢出位是正确的。但是,如果要保留溢出位并使用16位数字,则必须从左侧填充负数1位,结果为1111.1111.1101.1011。在添加它们时,这又意味着你有一个溢出位。
底线:添加两个相同位大小的二进制数会返回正确的结果,即使您忽略溢出位,如果有办法用给定的位数表示该结果。
答案 2 :(得分:-1)
我将用一个更简单的例子来解释。
我们计算A - B = 7 - 6 = 1
。
A = 7 = 0111
B = 6 = 0110
我们使用B'
来表示B
的补充,然后是B' = 1001
。
我们知道
B + B' = 1111 = -1
-B = B'+ 1
(-6 = 1001 + 1 = 1010
)
然后我们
| 0111
| + 1010
| = 10001
为什么我们得到最高位1?原因如下:
| A - B = A + (-B)
| = A + (B' + 1)
< - 使用2的补码方法。
| = A + ((1111 - B) + 1)
< - 使用B + B' = 1111
。
| = A - B + (1111 + 1)
| = A - B + 10000
< - 这是最高的1来自哪里。因为等号,我们知道如果需要我们可以丢弃最高的1。