# 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