首页 > 解决方案 > 波浪线对布尔值的影响——为什么在 Python 中 ~True 是 -2 而 ~False 是 -1?

问题描述

问题

我发现这~True-2&~False正在-1使用我的 Jupyter Notebook。

该消息来源~反转所有位。为什么不是~TrueisFalse~Falseis True


推理尝试

我试图解释这些:

True+1,并且 的位+1被反转。+倒置为-1在两位二进制中是01,所以反转位:10,即2。所以结果是-2

False+0,+被反转为-,0在两位二进制中是00, 所有位反转, 11, 即3- 它应该是1.


来源

这个答案指向了一个更复杂的画面:

一个完整的 True 列表仅包含对一个规范 True 对象的 4 或 8 字节引用。

这个消息来源说:

bool:布尔(真/假)类型。支持的精度:8(默认)位。

这些不支持上述简单化(显然是错误的)推理。


问题

~True那么,存在-2~False存在的正确解释是-1什么?

标签: pythonpython-3.xboolean

解决方案


首先,我会使用 not 运算符来反转布尔值(不是 True == False,反之亦然)。现在,如果布尔值存储为 8 位整数,则会发生以下情况:

True 是 0000 0001。因此 ~True 产生 1111 1110,这是二进制补码表示中的 -2。

False 是 0000 0000。因此 ~False 产生 1111 1111,即 -1。


推荐阅读