# 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
↑          ↑
```

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