使用六位一和二的补码表示我试图解决以下问题:
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 回答
使用二进制补码表示负值具有减法和加法相同的好处 . 在您的情况下,您可以将
12 - 7
视为12 + (-7)
. 因此,您只需要找到-7的二进制补码表示并将其添加到12:然后丢弃进位(表示溢出),结果如下:
000101
等于预期的5 .对于
-15 + 2
的示例,只需按照相同的步骤获得-15的二进制补码表示:现在像往常一样添加:
要看到
res
确实等于-13,您可以看到它是负数(MSB设置) . 对于幅度,转换为正(反转位,加1):因此,如预期的那样,幅度为13 .
不可以 . 二进制补码的算法不会根据负值的位置而改变 .