Numeral Systems

In math we use a particular numeral system to denote a particular number. A numeral system is defined by the particular symbols it uses to convey numbers.

Below we'll examine three numeral systems: decimal, binary and hexadecimal.

Decimal System

The numeral system you're probably most familiar with is the decimal system. The symbols (or "digits") used in decimal are: 0, 1, 2, 3, 4, 5, 6, 7, 8, and 9.

Decimal gets its name from the amount of unique symbols it uses to convey numbers: ten. It makes sense that we would gravitate to a system with ten unique symbols. After all, we typically have ten fingers (and ten toes).

The amount of unique symbols a numeral system uses is known as the "base" of that system (and is less often called a "radix").

Decimal is also a "positional" numeral system. Once we run out of symbols, we begin a new "order of magnitude" over with the same symbols. For example, after 9 comes 10. We recycle the 1 and 0 symbols to express that we've cycled through the number 1 times. When we reach 20, we want to say we've cycled though 2 times. We start new cycles at a regular interval - every time we've cycled through all the symbols of the digit furthest to the left.

If you're familiar with Roman numerals, you know that that system did not work that way. "Orders of magnitude" don't start and stop at regular intervals.

Let's Count

At the risk of taking things too slow, let's count in decimal the number of |s here:

||||||||||||

Let's begin with zero and go higher:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ...

Ok we're at nine, and we've run out of symbols. No worries. We add a 1 to the beginning to say we've already gone through one cycle of numbers, and we start over.

... 10, 11, 12

Sorry if that was a bit too easy. You're probably pretty good with the decimal system already so this wasn't too big of a challenge. But we'll do the same exercise with other numeral systems to get a better feel for them.

Let's Use Math

We can summarize what we just said with a math formula:

\[ 1 \cdot 10^1 + 2 \cdot 10^0 = 12 \]

Here we've written out that we've cycled completely through the numbers once and then gotten through two symbols of the next cycle.

The value 120 has a 0 at position zero, a 2 at position one and a 1 at position two.

  • The 1 at position two means you have counted "one" times "ten" (a.k.a the base) times all the digits (a.k.a the base) or \[ 1\cdot base \cdot base = 1 \cdot base^2 = 1 \cdot 10^2 = 100 \] When writing it as a power of the base, we can see the relation between the position of the digit and the power of the base.

  • The 2 at position one means you have counted two times all the digits (a.k.a the base) or \[ 2 \cdot base = 2 \cdot base^1 = 2 * 10^1 = 20 \]

  • The 0 at position zero means you have counted zero elements or \[ 0 = 0 \cdot base^0 = 0 \cdot 10^0 = 0 \cdot 1 = 0 \]

When we add all that up we obtain

\[ 1 \cdot base^2 + 2 \cdot base^1 + 0 \cdot base^0 = 1 \cdot 10^2 + 2 \cdot 10^1 + 0 \cdot 10^0 = 100 + 20 + 0 = 120 \]

Congrats! You've successfully converted a decimal value back into decimal - a feat that probably seems utterly useless but will come in very handy when we want to convert from some other numeral system to decimal.

Now we'll examine two new numeral systems. The are positional just like decimal, but have different bases. We'll examine binary with a base of two, and hexadecimal with a base of sixteen.

Binary system

Unlike decimal's base of ten, binary has a base of two. Meaning we only have two symbols to work with to represent all the numbers: 0, 1. Say goodbye to 3, 4, 5, 6, 7, 8, and 9. We can't use them.

So when we have the binary number 10 we don't have the number ten. What we've really done is counted once through all the digits of the system 0, 1 and started again. So we have the number two.

Let's Count

Let's count | again, but this time in binary:

|||||||

If we were counting in decimal we would use the symbol 7 to refer to this number. Let's start at zero:

0, 1 ...

Hopefully you weren't tempted to go to 2 next! That's right, we've already made a full round trip, so let's start over.

... 10, 11, 100, 101, 110, 111

We've successfully counted to the number seven using binary!

Let's Use Math

The binary value 100 means we have counted one times two (a.k.a the base) times through all the digits (a.k.a. the base), which would equal to 4 in decimal.

\[1 \cdot base^2 + 0 \cdot base^1 + 0 \cdot base^0 = 1 \cdot 2^2 + 0 \cdot 2^1 + 0 \cdot 2^0 = 4 \]

Let's do one more, the binary value 1010 means we have counted one times two (a.k.a the base) times two (a.k.a the base) times two (a.k.a the base) digits and one times two (a.k.a the base) times two (a.k.a the base) digits.

\[ 1 \cdot base^3 + 0 \cdot base ^2 + 1 \cdot base^1 + 0 \cdot base^0 = 1 \cdot 2^3 + 0 \cdot 2^2 + 1 \cdot 2^1 + 0 \cdot 2^0 = 8 + 2 = 10\]

Hurray! We've successfully converted binary to decimal!

Hexadecimal System

And now we meet hexadecimal with a base of sixteen. Before we begin we have to answer the question of how we represent sixteen unique digits when we're used to representing only ten.

To represent the digits after 9 until a new cycle begins we'll use the letters a through f. This is arbitrary and we could have chosen any other symbol really. But then again it's all arbitrary. We could, for example, use the symbol } to represent one, but we chose 1 instead.

So a in hexadecimal is equivalent to 10 in decimal, b equal to 11, etc.

The value 10 does exist in hexadecimal. It means, once again, we have counted through all the digits of the system once and are starting the cycle again. However, instead of it being ten, it's sixteen. Another way of thinking about this is 10 in hexadecimal is equal to 16 in decimal.

Let's Count

Once again, let's count |s but this time using hexadecimal notation:

||||||||||||||||||||

If we were using decimal we would use the symbol 20 to refer to this number. Let's start again at zero:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ...

Don't be tempted to do the decimal thing and use 10!

... a, b, c, d, e, f, 10, 11, 12, 13, 14

Congrats! You've counted to twenty in hexadecimal!

Let's Use Math

Let's do the math thing one more time with an exotic hexadecimal value: 3e8. This value means we have counted three times sixteen (a.k.a the base) times all the digits of the system (a.k.a the base) and e times, which is equal to 14 in decimal, all digits (a.k.a the base) and 8 remaining elements.

\[ 3 \cdot base^2 + e \cdot base^1 + 8 \cdot base^0 = 3 \cdot 16^2 + 14 \cdot 16^1 + 8 \cdot 16^0 = 768 + 224 + 8 = 1000 \]

Converting From Decimal to Another Base

Until now, we have only converted values from a numeral system with a specific base to the decimal system. But what if we want to do the opposite?

For this we are going to use the divison and remainders

Let's say we have the value 2344 and want to convert it into hexadecimal. We are going to divide the value by the base we want to convert to. The remainder of this operation will be our first digit (at position zero) and we are going to repeat this operation with the result of the (integer) division.

\[ \begin{array} {lcr} 16 & | & 2344 \\ && 146 & rem & 8 \\ && 9 & rem & 2 \\ && 0 & rem & 9 \end{array} \]

Remember the first remainder is the digit at the first position, position zero! So the converted number reads from bottom up: 928. We can double check that this is correct by converting the hexadecimal result back into decimal using the power rule.

\[ 9 \cdot 16^2 + 2 \cdot 16^1 + 8 \cdot 16^0 = 2344 \]

Let's do one more hexadecimal number before we try some binary numbers. The value we are going to convert from decimal to hexadecimal is 43981.

\[ \begin{array} {lcr} 16 & | & 43981 \\ && 2748 & rem & 13 = d \\ && 171 & rem & 12 = c \\ && 10 & rem & 11 = b \\ && 0 & rem & 10 = a \end{array} \]

The decimal value 43981 corresponds thus to the hexadecimal value abcd

Let's try the same for binary numbers now, if we want to convert the decimal value 41 to binary:

\[ \begin{array} {lcr} 2 & | & 41 \\ && 20 & rem & 1 \\ && 10 & rem & 0 \\ && 5 & rem & 0 \\ && 2 & rem & 1 \\ && 1 & rem & 0 \\ && 0 & rem & 1 \end{array} \]

We get the binary number 101001, let's check:

\[ 1 \cdot 2^5 + 0 \cdot 2^4 + 1 \cdot 2^3 + 0 \cdot 2^2 + 0 \cdot 2^1 + 1 \cdot 2^0 = 41 \]

Fantastic, it worked once again!

Conclusion

In this chapter we have learned there were many numeral systems beside the decimal system we use in our every day life. We've seen why the hexadecimal system uses the letters a through f and finally we have learned how to convert back and forth between any numeral system and the decimal system.