添加两个补码二进制

时间:2015-02-07 01:24:42

标签: math binary twos-complement

女士们,先生们,我已经成功地理解了对无符号二进制数的添加等。然而,这两个补充让我击败..让我用一些例子来解释。

示例练习题,使用8位有符号整数存储系统执行每个算法,在两个补码下:

  1111111
  01100001
+ 00111111
----------
  10100000    <== My Answer (idk if right / wrong), but i think right.

所以它不超过8位,但我们已经改变(正+正)=负。这必须是溢出,因为标志正在改变,对吧? (我从来不知道MSB中携带的是什么,并且执行了MSB&#39;)。

对我来说,真正棘手的部分是以下等式:(负+负),实际上等于(负 - 正)。

       111111
      10111111
    + 10010101
    ----------
  1 | 01010100

所以我认为这应该是错误的,因为当我们丢弃溢出位(在左场中输出的1)时,它将8位表示转换为正数,而它应该是负数。所以这会导致溢出,不是吗?

以下等式相似:

      1111
     10001110
   + 10110101
   ----------
 1 | 01000011

可以理解,如果我们使用16位等等,那么这些都不会溢出,因为符号不会改变,数学是正确的。但是,当我们存储这些数字的8位表示时,我们会丢失MSB,这会使符号翻转。

但是我注意到我的理论有一点是,每当添加两个负数时,MSB显然总是1,因此你总是会有一个进位,这意味着你总会有溢出。 / p>

**我认为更合乎逻辑的结论是,我忘记在添加它们之前将第二个否定值转换为正面或者某个东西,或者沿着这些线条转换。但是我已经在网上试过youtube和各种研究。 TBH,我的教授对整个&#34;沟通&#34;我希望社区能给予任何帮助,所以我可以将这些问题推到更难的材料XD上。

2 个答案:

答案 0 :(得分:2)

是的,如果丢弃1进位,则信号溢出。不要担心溢出。丢弃进位位是正确的。

  

但是,当我们存储这些数字的8位表示时,我们会丢失MSB,这会使符号翻转。

重要的是不要考虑丢弃1位作为翻转标志。首先,丢弃进位与翻转符号位不同。您可以从负面结果中丢弃进位,但仍然会得到否定答案。例如:

    1111111  
    11111111   (-1)
  + 11111111   (-1)
    --------
1 | 11111110   (-2)

最后1个进位被丢弃,但答案的标志不会翻转。

其次,即使您正在考虑翻转(而不是丢弃)符号位,将其视为翻转符号并不好。在符号幅度表示中,翻转符号位将翻转数字的符号。但是在一个人和两个人的补充中,否定不仅仅是翻转最左边的一点。如果你只是翻转一下,你会得到一个非常不同的数字。是的,它有相反的标志,但它的数字不一样。

           Sign Mag.  |  One's Compl.  |  Two's Compl.
01111111 =    127     |      127       |       127
11111111 =   -127     |      -0        |       -1

答案 1 :(得分:1)

是的,你的数学是正确的。

两种恭维的优雅之处在于,添加&#34;只是工作&#34;没有任何特殊考虑的符号位。这两个减法下溢的原因是因为数字的幅度已经非常大。

让我们用十进制来做最后两个问题:

   (-65)
+ (-107)
--------
  (-172) which underflows to 84.

  (-114)
+  (-75)
--------
  (-189) which underflows to 67.

最低有符号8位值为-128,因此它们都下溢。