In the article on bits and bytes, you learned about **binary addition**. In this section, you will learn how you can create a circuit capable of binary addition using the gates described in the previous section.

Let's start with a **single-bit adder**. Let's say that you have a project where you need to add single bits together and get the answer. The way you would start designing a circuit for that is to first look at all of the logical combinations. You might do that by looking at the following four sums:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 10

That looks fine until you get to 1 + 1. In that case, you have that pesky **carry bit** to worry about. If you don't care about carrying (because this is, after all, a 1-bit addition problem), then you can see that you can solve this problem with an XOR gate. But if you do care, then you might rewrite your equations to always include **2 bits of output**, like this:

0 + 0 = 00

0 + 1 = 01

1 + 0 = 01

1 + 1 = 10

From these equations you can form the logic table:

### 1-bit Adder with Carry-Out

### A B Q CO

0 0 0 0

0 1 1 0

1 0 1 0

1 1 0 1

By looking at this table you can see that you can implement Q with an XOR gate and CO (carry-out) with an AND gate. Simple.

What if you want to add two 8-bit bytes together? This becomes slightly harder. The easiest solution is to modularize the problem into **reusable components** and then replicate components. In this case, we need to create only one component: a **full binary adder**.

The difference between a full adder and the previous adder we looked at is that a full adder accepts an A and a B input plus a **carry-in** (CI) input. Once we have a full adder, then we can string eight of them together to create a byte-wide adder and cascade the carry bit from one adder to the next.

In the next section, we'll look at how a full adder is implemented into a circuit.