为什么〜真的结果是-2?
在Python控制台中:
~True 给我:
 -2 
为什么? 有人可以解释这个特殊情况给我的二进制?
 什么是int(True) ? 它是1 。 
  1是: 
 00000001 
 和~1是: 
 11111110 
 在二的补码 1中是-2 
1翻转所有的位,加1到结果数字,并将结果解释为幅度的二进制表示 ,并加上负号(因为数字以1开头):
 11111110 → 00000001 → 00000010 ↑ ↑ Flip Add 1 
这是2,但是因为MSB是1,所以这个符号是负的。
值得一提:
 想想bool ,你会发现它本质上是数字 – 它有两个值, True和False ,它们只是整数1和0的“自定义”版本,只是自己打印的方式不同。 它们是整数typesint 子类 。 
 所以它们的行为与1和0完全一样,除了bool重新定义str和repr以不同的方式显示它们。 
 >>> type(True) <class 'bool'> >>> isinstance(True, int) True >>> True == 1 True >>> True is 1 # they're still different objects False 
  Python booltypes是int一个子类(出于历史原因;布尔值仅在Python 2.3中添加)。 
 由于int(True)是1 ,所以~True是~1是-2 。 
 为了说明为什么bool是int的子类,请参阅PEP 285 。 
 如果你想要布尔逆, not使用: 
 >>> not True False >>> not False True 
 如果你想知道为什么~1是-2 ,这是因为你正在反转所有位的有符号整数;  00000001变成1111110 ,在有符号整数中是负数,参见二进制补码 : 
 >>> # Python 3 ... >>> import struct >>> format(struct.pack('b', 1)[0], '08b') '00000001' >>> format(struct.pack('b', ~1)[0], '08b') '11111110' 
 其中最初的1位表示该值为负,其余的位编码正数的倒数减一。 
  ~True == -2 并不令人惊讶,如果 True意味着1 并且 ~意味着按位反转 … 
… 提供的
-   True可以被视为一个整数和
- 整数用二的补码表示
编辑:
- 修正了整数表示法和位反转运算符之间的混合
- 应用另一种抛光(信息越短,需要的工作越多)