【问题标题】:Adding 8 bit numbers using signed 2's complement使用有符号 2 的补码添加 8 位数字
【发布时间】:2015-02-19 02:51:39
【问题描述】:

要么对下面写的内容有些混淆,要么我的教科书有误。 我在教科书中查看使用 2 的补码添加 8 位有符号二进制数字的示例,并遇到了这些示例。 我们需要查找是否发生溢出


示例 1]

添加 +75 和 -58​​p>

+75 = 01001011 ... (a)
+58 = 00111010
-58 = 11000110 ... (b) [取 +58 的 2 的补码]

现在添加 (a) 和 (b) 我们得到

     01001011
+  11000110
1]00010001

教科书中写到溢出发生时,箭头指向那个额外的 1,用方括号分隔。 这个例子没问题,从这里我了解到,如果有额外的 1,那么我们就会溢出。

(问题 1:我的理解是否正确?)


例子2:这个例子让我很困惑

添加 53 和 (-13)

53 = 00110101
-(13) = 11110011

现在添加两个我们得到

00110101 + 11110011 = 1]00101000

然后他们写道:有符号位的进位和进位是1。所以没有溢出。丢弃进位和休息是积极的要求结果

(主要问题:即使有这个溢出数字(额外1)为什么他们说它没有溢出。对于上面句子中写的有符号位,这些进位和执行是什么。)


我做了很多谷歌搜索,但找不到一个很好的合理解决方案来解决他们所说的这句话,或者可能是在我眼前但我不明白。有人请澄清。我看到的大多数示例(在堆栈溢出和其他站点上)都是 4 位,这让我更加困惑。有人请帮我澄清一下,谢谢。

【问题讨论】:

  • 这可能有助于澄清? stackoverflow.com/a/21965234/314291
  • 谢谢,这确实部分解决了我的疑问:)(感谢你的回答,现在我知道可以忽略额外的 1 ..),现在这些进位和执行位是什么他们指定教科书里的就是我剩下的了..

标签: binary overflow addition signed twos-complement


【解决方案1】:

仅当使用给定位数无法解释正确答案时才会发生溢出。解释正确答案需要额外的位。请考虑以下字节数加法示例:

+70 二进制 01000110

+80 二进制 01010000

添加时:10010110

MSB(最高有效位)中的 1 表示答案是否定的,这是错误的。但是,如果我们包含一个额外的第 9 位作为符号位(=0),我们的答案是 010010110 = 150。这个值额外的符号位等于进位,因为 MSB 中的位相加(在这种情况下 = 0)。

参考:M.Morris Mano 的计算机系统架构。

【讨论】:

    【解决方案2】:

    我将尝试通过示例解决您的疑问,我们将使用带符号 2 的补码方法将两个数字相加。

    但在此之前,让我告诉你溢出发生的条件。

    基本上,当进位符号位 不等于 进位符号位时会发生溢出。


    示例 1:

    十进制执行符号位 2 的补码
    
     -65 - 1 011 1111
    
     -15 - 1 111 0001
    ---------------------------------------------
     -80 1 1 011 0000
    
    0110000 的 1 补码 = 1001111
    将溢出数字 1 添加到 1001111 我们将得到答案为 1010000。
    使用有符号位,我们将得到 - 1 1010000 等于 -80
    
    

    进位符号位 = 1

    进行符号位 = 1

    因此,没有溢出


    示例 2:

    十进制执行符号位 2 的补码
    
     -65 - 1 011 1111
    
     -75 - 1 011 0101
    ------------------------------------------
    -140 1 0 111 0100

    进位符号位 = 0

    进行符号位 = 1

    因此,溢出

    我希望,这一定消除了您对溢出和签名 2 的补码二进制加法技术的疑虑。

    【讨论】:

      【解决方案3】:

      计算 8 位数时最简单的规则。

      Carry-Bit  |    Sign-Bit     
      -----------------------------------------------------
         0       |      0       --> No Underflow or Overflow
         1       |      1       --> No Underflow or Overflow
         0       |      1       --> OVerflow
         1       |      0       --> Underflow
      

      【讨论】:

        【解决方案4】:

        使用 8 位有符号 2 的补码表示添加以下内容:

        • 25 和 -40

        • 75 和 80

        【讨论】:

        • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        猜你喜欢
        • 2021-09-09
        • 2015-08-23
        • 1970-01-01
        • 2015-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-26
        相关资源
        最近更新 更多