Most people are aware of the fact that computers work using strings of
0s and 1s. But how do you write numbers using only those two symbols?

To see how, let's first remind ourselves of how the ordinary decimal way
of writing numbers works. Let's take the number 4302 as an example. The
digit 4 in this number doesn't stand for the number 4, rather it stands
for 4000, or 4 x 1000. Similarly, 3 doesn't stand for 3 but for 300 = 3
x 100, 0 stands for 0 x 10, and 2 stands for 2 x 1. So 4302 means

4 x 1000 + 3 x 1000 + 0 x 10 + 2 x 1.

Similarly, 7396 stands for

7 x 1000 + 3 x 100 + 9 x 10 + 6 x 1.

What do the numbers 1000, 100, 10 and 1, which appear in these
expressions, have in common? They are all powers of 10:

1000 = 10^{3}

100 = 10^{2}

10 = 10^{1}

1 = 10^{0}.

To write a number in decimal notation, you first write it as a sum of
consecutive powers of 10 (with the largest power on the left) and then
pull out the coefficients of these powers. We can do the same with
powers of 2 rather than 10. For example, the binary number 110 stands
for

1 x 2^{2} + 1 x 2^{1} + 0 x 2^{0} = 4 + 2 +0 = 6
(written in decimal).

And the binary number 10001 stands for

1 x 2^{4} + 0 x 2^{3} + 0 x 2^{2} + 0 x 2^{1}
+ 1 x 2^{0}
= 16 + 0 + 0 + 0 + 1 = 17 (written in decimal).

You can convince yourself that a binary number only consists of the
digits 0 or 1: when you write a number as a sum of consecutive powers of
2, no other coefficients are necessary.

This sorts out the natural numbers, but what about numbers that have a
fractional part? To write a number between 0 and 1 in binary, you play
the same game using powers of 1/2 instead of powers of 2. For example,

0.75 = 1/2 + 1/4 = 1 x 1/2^{1}+ 1 x 1/2^{2}.

In binary, 0.75 is written as 0.11. The binary number 0.1001 stands for
the decimal number

1 x 1/2^{1}+ 0 x 1/2^{2} + 0 x 1/2^{3}+ 1 x 1/2^{4}
= 1/2 + 1/16 =0.5625.

Easy!

You can find out more about the *positional* way of writing numbers here and about the use of 0s and 1s in logical operations here.