How to subtract in binary

Remember how subtraction works. We work from the least-significant bits to the most-significant, and pairwise subtract them. 1-1=0, 1-0=1, 0-0=0.

But 0-1 presents a problem: it’s negative 1. We represent this by outputting 1 and carrying a 1 to be subtracted from the next bits. We end up with the following logic table. It shows inputs CI (carry in), A (the bit being subtracted from), and B (the bit to subtract). These are mapped to outputs CO (carry out) and O (output).

(Inputs)  | (Outputs)
CI  A  B  | CO  O
== == ==  | == ==
 0  0  0  |  0  0
 0  0  1  |  1  1
 0  1  0  |  0  1
 0  1  1  |  0  0
 1  0  0  |  1  1
 1  0  1  |  1  0
 1  1  0  |  0  0
 1  1  1  |  1  1

The meaning here is that CO and O together represent the result of A - (B+CI). This is a number between -2 and 1. Here’s the meaning:

CO  O | Meaning
== == | =======
 0  0 |       0
 0  1 |       1
 1  0 |      -2
 1  1 |      -1

This is not arbitrary. The relation is that Meaning = ( CO * -2) + O. This is precisely “two’s complement representation”: CO and O placed side-by-side are the two’s complement representation of the number.

Tagged #programming, #computer-science.

Similar posts

More by Jim

Want to build a fantastic product using LLMs? I work at Granola where we're building the future IDE for knowledge work. Come and work with us! Read more or get in touch!

This page copyright James Fisher 2017. Content is not associated with my employer. Found an error? Edit this page.