首页 文章

添加和减去两个补码

提问于
浏览
6

使用六位一和二的补码表示我试图解决以下问题:

12 - 7

现在,我先拿二进制12和二进制7 .

12 = 001100 - 6 bit 
7 =  000111 - 6 bit

然后,我会将这个位翻转为两个补码并添加一个吗?

12 = 110011 ones complement 
     +    1
    -------
     001101

7  = 111000 ones complement 
    +     1
   ---------
      111001

然后,将这两个补码加在一起

001101
+111001
-------
1000110 = overflow? discard the last digit?  If so I get 5

现在,如果我有一个像

-15 + 2

如果它是零,我会在MSB上添加一个符号幅度?

喜欢:

-15 = 001111 6 bit

在翻转位之前,我会在这里添加1吗?

= 101111

2 回答

  • 2

    使用二进制补码表示负值具有减法和加法相同的好处 . 在您的情况下,您可以将 12 - 7 视为 12 + (-7) . 因此,您只需要找到-7的二进制补码表示并将其添加到12:

    12  001100
    -7  111001   -- to get this, invert all bits of 7 (000111) and add 1
    ----------
     5 1000101
    

    然后丢弃进位(表示溢出),结果如下: 000101 等于预期的5 .

    对于 -15 + 2 的示例,只需按照相同的步骤获得-15的二进制补码表示:

    15  001111
        110000   -- inverted bits
        110001   -- add 1
    

    现在像往常一样添加:

    -15  110001
      2  000010
    -----------
    res  110011
    

    要看到 res 确实等于-13,您可以看到它是负数(MSB设置) . 对于幅度,转换为正(反转位,加1):

    res  110011
         001100  -- inverted bits
         001101  -- add 1
    

    因此,如预期的那样,幅度为13 .

  • 15

    不可以 . 二进制补码的算法不会根据负值的位置而改变 .

相关问题