Why does ~True result in -2?

In Python console:

    ~True

Gives me:

    -2

Why? Can someone explain this particular case to me in binary?

What is int(True)? It 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

From: stackoverflow.com/q/21881362