情况1:
让我尝试以4位表示2的补码中的-7:-
7二进制:0111
7合1的补码:1000
7合2的补码:1001
所以将我的2的数字转换为十进制:-1x2 ^ 3 + 0 + 0 + 1x2 ^ 0
=> -8 + 1 = -7
这是正确的 !!!
情况2:
让我尝试用4位表示2的补码中的7:-
-7的二进制数:1111
7合1的补码:1000
7合2的补码:1001
所以将我的2的数字转换为十进制:-1x2 ^ 3 + 0 + 0 + 1x2 ^ 0
=> -8 + 1 = -7
它仍然是-7,我错了!!!!
答案 0 :(得分:1)
您对概念稍有混淆-
MSB (最高有效位)表示数字的符号。 0
代表肯定,而1
代表负面。另外, MSB 不参与数字转换(如果它代表符号)。
因此,二进制文件中的-7
是1111
,而不是0111
。
现在,要对二进制数字进行加,减,除,乘运算,我们可以将带符号的数字与 MSB 一起使用,并定义新的规则以获取正确的结果。
OR
使用补码方法。
计算数字的补数
+7 -> 0111 (+) -7 -> 1001 (2s complement) ...................... 0 -> 10000 (ignoring the carry over MSB we will get zero which is the correct answer)