使用带符号2的补码添加8位数

时间:2014-12-20 08:20:09

标签: binary overflow addition signed twos-complement

要么与下面的内容混淆,要么我的教科书出错了。 我在教科书中查看了使用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位,这让我们感到困惑。有人请帮我澄清一下,谢谢。

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