# Two’s Complement

Two’s complement is the way computers store integers so that it handles both positive and negative numbers.

The rule it follows to represent the inverse of a number is straightforward, you do the following operations on the bits:

- Invert them
- Add one

So with decimal `3`

being represented as `0011`

. To make this `-3`

, we

- Invert them:
`1100`

- Add one:
`1101`

We can revert back, too:

- Invert them:
`0010`

- Add one:
`0011`

You might be ready to ask “but hold on `1101`

represents decimal `13`

”! This statement is correct if you were talking about unsigned values. But when representing negative values, we call these ‘signed’, which means that the first bit is the sign, which indicates whether it is a positive or negative value. Therefore `01`

indicates decimal `1`

and `11`

indicates decimal `-1`

.

For this reason unsigned values can hold a larger positive number than signed values as they have one extra bit to work with. An unsigned byte can hold a value in the range of `0`

to `255`

whereas a signed byte can hold a value of `-128`

to `127`

.

So why do we do this? Why can’t we just use the sign and then the other bits using the standard value making `3`

be `1011`

?

Because whilst this would make more sense in our head, using two’s complement allows the CPU’s circuitry for addition and subtraction to be the same operation - they are both adding by using basic carrying logic seen in circuits.