在 Python 控制台中:
~True
给我:
-2
为什么? 谁能用二进制解释一下这个案子?
Python bool类型是 int的一个子类(由于历史原因,布尔值只是在 Python 2.3中添加的)。
bool
int
因为 int(True)是 1,~True是 ~1是 -2。
int(True)
1
~1
请参阅 PEP 285了解为什么 bool是 int的一个子类。
如果你想要布尔逆,使用 not:
not
>>> not True False >>> not False True
如果你想知道为什么 ~1是 -2,这是因为你正在反转一个有符号整数中的所有位; 00000001变成 1111110,在一个 签了整数中是一个负数,参见 两个人就够了:
00000001
1111110
>>> # Python 3 ... >>> import struct >>> format(struct.pack('b', 1)[0], '08b') '00000001' >>> format(struct.pack('b', ~1)[0], '08b') '11111110'
其中初始 1位表示值为负,其余位编码正数减1的倒数。
int(True)是 1。
1为:
~1为:
11111110
也就是 两个人就够了1中的 -2
翻转所有位,将1加到结果数字上,并将结果解释为大小为 二进制表示法的值,然后加上一个负号(因为数字以1开头) :
11111110 → 00000001 → 00000010 ↑ ↑ Flip Add 1
也就是2,但是符号是负的,因为 MSB是1。
值得一提的是:
考虑一下 bool,你会发现它本质上是数字的——它有两个值,True和 False,它们只是整数1和0的“定制”版本,只是打印它们自己的方式不同。它们是整数类型 int的 子类。
True
False
除了 bool重新定义 str和 repr以不同的方式显示它们之外,它们的行为完全与1和0一样。
str
repr
>>> type(True) <class 'bool'> >>> isinstance(True, int) True >>> True == 1 True >>> True is 1 # they're still different objects False
~True == -2是 不足为奇True意味着 1还有~意味着 按位反转按位反转..。
~True == -2
~
... 前提是
编辑: