在Python中按位的意思

时间:2017-10-04 20:00:31

标签: python bit-manipulation

为什么按位不不会像切换位那样起作用?参见下面的例子:

a = 5
print(bin(a))
b = ~a
print(bin(b))

这是输出:

0b101
-0b110

问题是为什么左边的第一位没有切换?

考虑到Python文档说:

  

~x返回x的补码 - 通过切换每个得到的数字   1表示0,0表示1。

编辑:你是说#34;〜"不是简单切换位的运算符,而是它是二进制补码的运算符? 如果是这样,为什么从文档中引用的句子不能说明这一点。 Python文档中的上述句子并不意味着这一点。

1 个答案:

答案 0 :(得分:9)

切换所有位。 所有,包括无限数量的前导零,产生无限数量的前导零:

0b...111111111111111111111111111111111111111111111111111010

因为Python模拟无限位表示,而不是3位或32位或64位或任何有限数字。

Python无法向您展示无限数量的领先者,因此它会向您显示前面带有bin(abs(b))符号的-abs(b)6bin(6)'0b110',所以你看到了

-0b110