int(True)
is 1
.
1
is:
00000001
and ~1
is:
11111110
Which is -2
in Two's complement1
1 Flip all the bits, add 1 to the resulting number and interpret the result as a binary representation of the magnitude and add a negative sign (since the number begins with 1):
11111110 → 00000001 → 00000010
↑ ↑
Flip Add 1
Which is 2, but the sign is negative since the MSB is 1.
Worth mentioning:
Think about bool
, you'll find that it's numeric in nature - It has two values, True
and False
, and they are just "customized" versions of the integers 1 and 0 that only print themselves differently. They are subclasses of the integer type int
.
So they behave exactly as 1 and 0, except that bool
redefines str
and repr
to display them differently.
>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True
>>> True == 1
True
>>> True is 1 # they're still different objects
False
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…