Python中为什么~True的值为-2?

问题:

在Python控制台中:

~True

给我:

-2

为什么?有人能用二进制解释这个特殊情况吗?

回答:

什么是int(True)?是1
1是:

00000001

~1是:

11111110

Two’s complement 1中的-2
1翻转所有位,将1加到结果数字,并将结果解释为大小的binary representation,并添加一个负号(由于数字以1开头):

11111110 → 00000001 → 00000010 
         ↑          ↑ 
       Flip       Add 1

哪个是2,但符号为负,因为MSB为1。
值得一提:
想想bool,你会发现它是数值的 – 它有两个值TrueFalse,它们只是整数1和0的“自定义”版本,只能打印自己的不同。它们是整数类型intsubclasses
所以它们的行为完全为1和0,除了bool重新定义strrepr以不同的方式显示它们。

>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True

>>> True == 1
True
>>> True is 1  # they're still different objects
False

Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why does ~True result in -2?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 3 = 1