In mathematics, the *additive inverse* of a number *n* is the value, when
added to *n*, produces zero. Here are a few examples, expressed in decimal:

6 + –6 = 0

0 + 0 = 0

–1 + 1 = 0

Programs often include both subtraction and addition operations, but internally, the CPU really only performs addition. To get around this restriction, the computer uses the additive inverse. When subtracting A – B, the CPU instead performs A + (–B). For example, to simulate the subtraction of 4 from 6, the CPU adds –4 to 6:

6 + –4 = 2

Binary Two’s Complement

When working with binary numbers, we use the term *two’s complement* to refer
to a number’s additive inverse. The two’s complement of a number *n* is
formed by reversing *n*’s bits and adding 1. Here, for example, *n* equals
the 4-bit number 0001:

N: | 0001 |

Reverse N: | 1110 |

Add 1: | 1111 |

The two’s complement of *n*, when added to *n*, produces zero:

0001 + 1111 = 0000

It doesn’t matter how many bits are used by *n*. The two’s complement is
formed using the same method:

N = 1 | 00000001 |

Reverse N: | 11111110 |

Add 1: | 11111111 |

N = 1 | 0000000000000001 |

Reverse N: | 1111111111111110 |

Add 1: | 1111111111111111 |

Here are some examples of 8-bit two’s complements:

n(decimal) | n(binary) | NEG(n) | (decimal) |

+2 | 00000010 | 11111110 | –2 |

+16 | 00010000 | 11110000 | –16 |

+127 | 01111111 | 10000001 | –127 |