使用六位一和二的补码表示我试图解决以下问题:
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
答案 0 :(得分: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。
答案 1 :(得分:2)
没有。二进制补码的算法不会根据负值的位置而改变。