要么与下面的内容混淆,要么我的教科书出错了。 我在教科书中查看了使用2的补码添加8位带符号二进制数字的示例,并且遇到了这些示例。 我们需要查找是否发生溢出
示例1]
添加+75和-58
+75 = 01001011 ...(a)
+58 = 00111010
-58 = 11000110 ...(b)[取+2的2的补码]
现在添加(a)和(b)我们得到
01001011
+ 11000110
1] 00010001
在教科书中写道,溢出发生时箭头指向用方括号分隔的额外1。 这个例子没问题,从这里我明白如果有和额外的1那么我们就有溢出。
(问题1:我的理解是正确的吗?)
示例2:此示例让我感到困惑
添加53和(-13)
53 = 00110101
- (13)= 11110011
现在添加两个我们得到
00110101 + 11110011 = 1] 00101000
然后他们写道:进行并执行签名位是1.所以没有溢出。丢弃进位和静止是正的结果
(主要问题:即使有这个溢出数字(额外1),为什么他们说它不溢出。这些是什么进位并执行上面句子写的有符号位。)
我做了很多谷歌搜索,但找不到他们谈到的这条线的合理解决方案,或者可能是在我眼前,但我不明白。有人请澄清一下。我看到的大多数示例(在堆栈溢出和其他站点上)都是4位,这让我们感到困惑。有人请帮我澄清一下,谢谢。
答案 0 :(得分:2)
仅当使用给定的位数无法解释正确的答案时才会发生溢出。需要一个额外的位来解释右边的答案。考虑下面的字节数加法示例:
二进制01000110+70
+80二进制01010000
另外:10010110
MSB中的1(最高有效位)表示答案是否定的,这是错误的。但是如果我们将一个额外的第9位作为符号位(= 0),我们的答案为010010110 = 150.这个值由于在MSB中添加了比特(在这种情况下= 0),额外符号位等于进位。
参考:M.Morris Mano的计算机系统架构。
答案 1 :(得分:2)
我将尝试借助示例来解决您的疑问,在示例中,我们将使用带符号2的补码方法添加两个数字。
但是在此之前,让我告诉您发生溢出的情况。
基本上,当携带符号位与携带符号位不相等时,会发生溢出。
示例1:
Decimal Carry out Sign bit 2’s Complement -65 - 1 011 1111 -15 - 1 111 0001 --------------------------------------------- -80 1 1 011 0000 1's complement of 0110000 = 1001111 Adding Overflow digit 1 to 1001111 we will get our answer as 1010000. With signed bit we will get - 1 1010000 which is equal to -80
进入符号位= 1
携带出符号位= 1
因此,没有溢出
示例2:
Decimal Carry out Sign bit 2’s Complement -65 - 1 011 1111 -75 - 1 011 0101 -------------------------------------------- -140 1 0 111 0100
进入符号位= 0
携带出符号位= 1
因此,溢出
我希望,这一定会清除您对溢出的怀疑,并签署2的补码二进制加法技术。
答案 2 :(得分:0)
计算8位数字时的最简单规则。
Carry-Bit | Sign-Bit
-----------------------------------------------------
0 | 0 --> No Underflow or Overflow
1 | 1 --> No Underflow or Overflow
0 | 1 --> OVerflow
1 | 0 --> Underflow
答案 3 :(得分:-1)
使用8位带符号2的补码表示法添加以下内容:
25和-40
75和80