按位不是,有人可以解释这个例子吗?

时间:2017-12-15 19:36:07

标签: python bit-manipulation xor

有人可以通过二进制数字解释这个例子吗?

>>> ~11
-12

2 个答案:

答案 0 :(得分:1)

使用8位表示(您可以对相同的结果使用更大的表示):

~11 => ~ b 00001011

应用NOT运算符yield(1转为0,反之亦然):

~(b 00001011) => b 11110100

结果为负(因为最左边的位是符号位)。要发现它的价值,请应用2的补码运算符(参见here):

b 11110100, negate bits:
b 00001011, add 1:
+        1
----------
b 00001100 => 12

意思是结果是-12。

答案 1 :(得分:0)

def toBinary(n):
    return ''.join(str(1 & int(n) >> i) for i in range(64)[::-1])

toBinary(11)返回

0000000000000000000000000000000000000000000000000000000000001011

toBinary(-12)返回

1111111111111111111111111111111111111111111111111111111111110100

来自Python文档 ~x:返回x的补码 - 通过将每个1切换为0而每个0切换为1得到的数字。这与-x - 1相同。 更多信息:https://wiki.python.org/moin/BitwiseOperators