Hexadecimal numbers are a type of number which use the normal digits and letters A-F. In order to understand what these numbers mean and how they work, we will need to introduce a few concepts. In the sections below, we'll introduce the concept of *number bases*, the discuss how hexadecimal numbers fit into this, how to work with them, and how to convert from hexadecimal back to normal numbers.

### Number Base

A **number base** is the number of digits a numeric system uses to denote numbers. Common, every day numbers and math systems use **10** digits, the digits 0-9, to represent numbers, making it a system of *base 10*. This is referred to as the **decimal system**, the prefix *dec* standing for *10*. Most numbers will not use all 10 digits, but they are still considered base 10 numbers because the 10 digits are still "available". *Binary* numbers, numbers of which only have the digits 0 and 1, form a system of *base 2*. The binary number *10* is equal to the the decimal number *2*. When discussing numbers of different bases at the same time, we can use a subscript to denote which base the number is declared as; the last sentence can be summarized as: 10_{2} = 2_{10}. Note that the subscript number itself will always be base 10. In this article, we will be discussing base 2, base 10, and base 16, but note that any other positive integer greater than or equal to 2 can also be used as a base.

### Hexadecimal System

The **hexadecimal system** is a system which has **16** digits, making it a *base 16* system. The prefix *hex* stands for *6*, combined with the prefix *dec* stands for 16. The available digits are *0-9 and A-F*. It uses the same 10 digits as the decimal system, then uses the additional A-F as the remaining 6 digits. The decimal number *10* is equal to the hexadecimal number *A*, and the hexadecimal number *10* is equal to the decimal number *16*. More concisely: A_{16} = 10_{10} and 10_{16} = 16_{10}. Hexadecimal numbers are useful for certain programming needs, such as color specification, because 16 is a power of 2, so anything which can be represented with binary numbers can also easily be represented by hexadecimal; it's much easier to convert between binary and hexadecimal than it is to convert between binary and decimal.

### Number Values and Operations in Different Bases

The only difference between binary numbers, decimal numbers, and hexadecimal numbers is the number of digits available to denotate a number. Each system can represent the same number values and perform the same operations of addition, multiplication, exponentiation, and all others. In other words, the difference is in the notation of the numbers only, not the numbers themselves or operations over them. Furthermore, any number which can be expressed in one base can be expressed in all bases. Therefore, the choice of which base to use in any given situation should be based on what is required for notation, data transfer, or data storage purposes.

### The Number 10

In any base, the value of the number denoted by "10" is equal to the number of digits in that base. We can consider "10" to be the first occurence of an *overflow*, where we run out of digits and have no choice but to use a second digit. The number "100" is the second overflow; we run out of digits again, so we must use a third one to continue declaring numbers. In the general sense, a number which is denoted as "1" followed by *x* number of zeros in a base *b* will be equal to the value of *b ^{x}*. The table below shows the values of "100" and "1000" for bases 2, 10, and 16 converted to base 10.

Base | Decimal Value of "10" | Decimal Value of "100" | Decimal Value of "1000" |
---|---|---|---|

2 | 10_{2} = 2_{10} = 2_{10}^{110} | 100_{2} = 4_{10} = 2_{10}^{210} | 1000_{2} = 8_{10} = 2_{10}^{310} |

10 | 10_{10} = 10_{10} = 10_{10}^{110} | 100_{10} = 100_{10} = 10_{10}^{210} | 1000_{10} = 1000_{10} = 10_{10}^{310} |

16 | 10_{16} = 16_{10} = 16_{10}^{110} | 100_{16} = 256_{10} = 16_{10}^{210} | 1000_{16} = 4096_{10} = 16_{10}^{310} |

### Converting to Base 10

Understanding how to convert a hexadecimal number to base 10 is not crucial towards understanding the concepts of bases and hexadecimal numbers, but we will give a brief overview nonetheless. As stated above, a number marked as "10", "1000", or similar, is equal to the base taken to the power of the number of zeros. This hints at the fact that **the base and amount of digits in a number have a strong relationship with the value of the number itself**. As the number of digits available increases, the number of digits we need to use to represent any particular number decreases. For example, we can represent the number 4095_{10}, which uses 4 digits in base 10, using only 3 digits in base 16 as the number fff_{16}, whereas we would need 12 digits in base 2 as the number 111111111111_{2}. The table below shows a series of numbers as they are denoted in each base.

Base 2 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|

Base 10 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |

Base 16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |

The value of a number in base *b* with digits **d _{n}....d_{1}d_{0}** can be described as

**d**. Starting with 0 instead of 1 makes the math a bit simpler. That equation may look tricky at first, so let's apply it to something that is already in base 10 to see how it works. If we take the number 8945

_{0}⋅ b^{0}+ d_{1}⋅ b^{1}.... d_{n}⋅ b^{n}_{10}, we see that digit 0 is

*5*, digit 1 is

*4*, digit 2 is

*9*, and digit 3 is

*8*. If we plug these into the formula, we will have:

**5 ⋅ 10**.

^{0}+ 4 ⋅ 10^{1}+ 9 ⋅ 10^{2}+ 8 ⋅ 10^{3}= 5 + 40 + 900 + 8000 = 8945 Now let's apply this concept to a hexadecimal number: the number A43C_{16} has 4 digits. *C* is digit 0, *3* is digit 1, *4* is digit 2, and *A* is digit 3. If we run the equation above, we will get: **12 ⋅ 16 ^{0} + 3 ⋅ 16^{1} + 4 ⋅ 16^{2} + 10 ⋅ 16^{3} = 42044_{10}**. In the case of hexadecimal, or any base larger than 10, we have to convert each digit to its base 10 value before performing the calculation. In this example, we converted C to 12 and A to 10. The approach is to take the value of each digit, converts it to base 10, then multiply it by the base taken to the power of the digit position.