首页 文章

添加两个补码二进制

提问于
浏览
0

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

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

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

所以它不超过8位,但我们改变了(正面正面)=负面 . 这必须是溢出,因为标志正在改变,对吧? (我从来不知道MSB的携带和执行MSB的是什么) .

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

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

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

以下等式类似:

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

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

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

**我认为更合乎逻辑的结论是,我忘记在添加它们之前将第二个否定转换为正面或某些东西,或类似的东西 . 但我在网上试过youtube和各种研究 . TBH,我的教授对整个“沟通”事情很糟糕 . 我会感谢社区给予的任何帮助,所以我可以将这些问题推到更难的材料XD上 .

2 回答

  • 1

    是的,如果丢弃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
    
  • 2

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

    两个恭维的优雅之处在于,没有对符号位进行任何特殊考虑 . 这两个减法下溢的原因是因为数字的大小已经非常大 .

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

    (-65)
    + (-107)
    --------
      (-172) which underflows to 84.
    
      (-114)
    +  (-75)
    --------
      (-189) which underflows to 67.
    

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

相关问题