为什么按位不不会像切换位那样起作用?参见下面的例子:
a = 5
print(bin(a))
b = ~a
print(bin(b))
这是输出:
0b101
-0b110
问题是为什么左边的第一位没有切换?
考虑到Python文档说:
~x返回x的补码 - 通过切换每个得到的数字 1表示0,0表示1。
编辑:你是说#34;〜"不是简单切换位的运算符,而是它是二进制补码的运算符? 如果是这样,为什么从文档中引用的句子不能说明这一点。 Python文档中的上述句子并不意味着这一点。
答案 0 :(得分:9)
切换所有位。 所有,包括无限数量的前导零,产生无限数量的前导零:
0b...111111111111111111111111111111111111111111111111111010
因为Python模拟无限位表示,而不是3位或32位或64位或任何有限数字。
Python无法向您展示无限数量的领先者,因此它会向您显示前面带有bin(abs(b))
符号的-
。 abs(b)
是6
而bin(6)
是'0b110'
,所以你看到了
-0b110