我对 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
试图理解为什么 ~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