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

What am I doing wrong with 2's complement?

试图理解为什么 ~8-9

我的错误数学如下:

1.) 8 在二进制中是 1000.
2.) 反转所有位:0111.
3.) 添加 1: 1000.

...现在我得到了与开始时相同的东西。我在这里做错了什么?

四位只能用二进制补码表示-8 .. 7。要对 8 进行数学运算,您至少需要五位。

你在这里所做的基本上是溢出,因为你的 8 值最初编码为 -9 无论如何。

这是修改后的版本:

 8 = 01000
~8 = 10111
+1 = 11000

它的次要组成部分是 1000,倒置后是 0111,即 7,而 7+1 考虑到偏移量,使您回到 8。

让我们以 8 位工作。

8 = 00001000
9 = 00001001

~8 = 11110111 Inverse of 8

现在让我们对 9 进行 2 的补码得到 -9

00001001 9
11110110 Inverse
11110111 Add 1
-9 = 11110111

注意~8 = -9