我对2的补码做错了什么?

时间:2017-02-15 20:18:51

标签: twos-complement

试图了解~8-9的原因。

我的错误数学如下:

1。)二进制81000 2.)反转所有位:0111
3.)添加1:1000

....现在我开始有同样的事情了。我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

四位只能表示两个补码中的-8 .. 7。要在8上进行数学计算,你至少需要5位。

您在此处所做的基本上是溢出,因为您的8值最初编码为-9

这是一个重写版本:

 8 = 01000
~8 = 10111
+1 = 11000

它的次要成分是1000,当它被反转为0111时,它是7和7 + 1,考虑到偏移,会让你回到8。

答案 1 :(得分:1)

让我们以8位工作。

8 = 00001000
9 = 00001001

~8 = 11110111 Inverse of 8

现在让我们做9的2补码得到-9

00001001 9
11110110 Inverse
11110111 Add 1
-9 = 11110111

请注意~8 = -9