只是怀疑二元一体的补充是如何工作的。例如(在python中): -
a = 60
print(~a)
给出一个输出:-
-61
60
不是二元的补充: -
a = 0011 1100
~a = 1100 0011
它不应该是-60
?
我知道我错了,但为什么要转向-61
?
~
是一个按位求逆运算符和it acts exectly as defined:
x的按位求逆定义为 - (x + 1)。
这就是整数的two's complement representation的按位反转如何工作。
这两个补充轮可以很好地形象化:
如您所见,1的按位反转为-2,2的按位反转为-3,...,60的按位反转为-61。
你快到了。 1100 0011
实际上是-61
。
这是负二进制转换为十进制的方式:
所以:
1100 0011
0011 1100 <-- bits inverted
0011 1101 <-- one added
61 <-- converted to decimal
-61 <-- added negative sign
来自维基百科的Two's complement page:
N位数的二进制补码被定义为相对于2 ^ N的补码。例如,对于三位数010,二进制补码为110,因为010 + 110 = 1000。
这里1100 0011
的补充是0011 1101
cuz
1100 0011
+ 0011 1101
-------------
1 0000 0000