为什么Python中~True = -2?

Wol*_*Ves 3 python python-3.x

我完全困惑了。我们遇到了一个错误,我们很容易修复了它,但我们很困惑为什么错误生成的值会创建它所做的输出。具体来说:

为什么Python中~True等于?-2

~True 
>> -2 
Run Code Online (Sandbox Code Playgroud)

按位运算符不应该~只返回二进制吗?

(Python v3.8)

tde*_*ney 6

True是 的专业化int。在Python中,整数是有符号且无界的。如果要反转固定大小的整数(例如 16 位)0x0001,您将得到带符号0xfffe的整数-2。但 python 需要该操作的不同定义,因为它没有大小限制。在一元算术和按位运算中,python将一元反转定义为

一元 ~(反转)运算符产生其整数参数的按位反转。x 的按位反转定义为 -(x+1)。它仅适用于整数或覆盖invert () 特殊方法的自定义对象。

这与固定大小的位反转具有相同的效果,而不会弄乱无穷大。果然

>>> -(True+1)
-2
Run Code Online (Sandbox Code Playgroud)