6

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

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
4

2 回答 2

15

使用二进制补码表示负值具有减法和加法相同的好处。在您的情况下,您可以将其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。

于 2010-10-07T01:43:19.500 回答
2

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

于 2010-10-07T01:24:11.150 回答