The one main disadvantage of binary numbers is that the binary string equivalent of a large decimal base-10 number can be quite long.

When working with large digital systems, such as computers, it is common to find binary numbers consisting of 8, 16 and even 32 digits which makes it difficult to both read or write without producing errors especially when working with lots of 16 or 32-bit binary numbers.

One common way of overcoming this problem is to arrange the binary numbers into groups or sets of four bits (4-bits). These groups of 4-bits uses another type of numbering system also commonly used in computer and digital systems called **Hexadecimal Numbers**.

Hexadecimal Number String

The “Hexadecimal” or simply “Hex” numbering system uses the **Base of 16** system and are a popular choice for representing long binary values because their format is quite compact and much easier to understand compared to the long binary strings of 1’s and 0’s.

Being a Base-16 system, the hexadecimal numbering system therefore uses 16 (sixteen) different digits with a combination of numbers from 0 through to 15. In other words, there are 16 possible digit symbols.

However, there is a potential problem with using this method of digit notation caused by the fact that the decimal numerals of 10, 11, 12, 13, 14 and 15 are normally written using two adjacent symbols. For example, if we write 10 in hexadecimal, do we mean the decimal number ten, or the binary number of two (1 + 0). To get around this tricky problem hexadecimal numbers that identify the values of ten, eleven, . . . , fifteen are replaced with capital letters of A, B, C, D, E and F respectively.

Then in the **Hexadecimal Numbering System** we use the numbers from 0 to 9 and the capital letters A to F to represent its Binary or Decimal number equivalent, starting with the least significant digit at the right hand side.

As we have just said, binary strings can be quite long and difficult to read, but we can make life easier by splitting these large binary numbers up into even groups to make them much easier to write down and understand. For example, the following group of binary digits 1101 0101 1100 1111_{2} are much easier to read and understand than 1101010111001111_{2} when they are all bunched up together.

In the everyday use of the decimal numbering system we use groups of three digits or 000’s from the right hand side to make a very large number such as a million or trillion, easier for us to understand and the same is also true in digital systems.

**Hexadecimal Numbers** is a more complex system than using just binary or decimal and is mainly used when dealing with computers and memory address locations. By dividing a binary number up into groups of 4 bits, each group or set of 4 digits can now have a possible value of between “0000” (0) and “1111” ( 8+4+2+1 = 15 ) giving a total of **16** different number combinations from 0 to 15. Don’t forget that “0” is also a valid digit.

We remember from our first tutorial about **Binary Numbers** that a 4-bit group of digits is called a “nibble” and as 4-bits are also required to produce a hexadecimal number, a hex digit can also be thought of as a nibble, or half-a-byte. Then two hexadecimal numbers are required to produce one full byte ranging from 00 to FF.

Also, since 16 in the decimal system is the fourth power of 2 ( or 2^{4} ), there is a direct relationship between the numbers 2 and 16 so one hex digit has a value equal to four binary digits so now q is equal to “16”.

Because of this relationship, four digits in a binary number can be represented with a single hexadecimal digit. This makes conversion between binary and hexadecimal numbers very easy, and hexadecimal can be used to write large binary numbers with much fewer digits.

The numbers 0 to 9 are still used as in the original decimal system, but the numbers from 10 to 15 are now represented by capital letters of the alphabet from A to F inclusive and the relationship between decimal, binary and hexadecimal is given below.

### Hexadecimal Numbers

Decimal Number | 4-bit Binary Number | Hexadecimal Number |

0 | 0000 | 0 |

1 | 0001 | 1 |

2 | 0010 | 2 |

3 | 0011 | 3 |

4 | 0100 | 4 |

5 | 0101 | 5 |

6 | 0110 | 6 |

7 | 0111 | 7 |

8 | 1000 | 8 |

9 | 1001 | 9 |

10 | 1010 | A |

11 | 1011 | B |

12 | 1100 | C |

13 | 1101 | D |

14 | 1110 | E |

15 | 1111 | F |

16 | 0001 0000 | 10 (1+0) |

17 | 0001 0001 | 11 (1+1) |

Continuing upwards in groups of four |

Using the original binary number from above 1101 0101 1100 1111_{2} this can now be converted into an equivalent hexadecimal number of D5CF which is much easier to read and understand than a long row of 1’s and 0’s that we had before.

So by using hexadecimal notation, digital numbers can be written using fewer digits and with a much less likelihood of an error occurring. Similarly, converting hexadecimal based numbers back into binary is simply the reverse operation.

Then the main characteristics of a **Hexadecimal Numbering System** is that there are 16 distinct counting digits from 0 to F with each digit having a weight or value of 16 starting from the least significant bit (LSB). In order to distinguish Hexadecimal numbers from Denary numbers, a prefix of either a “#”, (Hash) or a “$” (Dollar sign) is used before the actual **Hexadecimal Number** value, #D5CF or $D5CF.

As the base of a hexadecimal system is 16, which also represents the number of individual symbols used in the system, the subscript 16 is used to identify a number expressed in hexadecimal. For example, the previous hexadecimal number is expressed as: D5CF_{16}

## Counting using Hexadecimal Numbers

So we now know how to convert 4 binary digits into a hexadecimal number. But what if we had more than 4 binary digits how would we count in hexadecimal beyond the final letter F. The simple answer is to start over again with another set of 4 bits as follows.

0…to…9, A,B,C,D,E,F, 10…to…19, 1A, 1B, 1C, 1D, 1E, 1F, 20, 21….etc

Do not get confused, 10 or 20 is **NOT** ten or twenty it is 1 + 0 and 2 + 0 in hexadecimal. In fact twenty does not even exist in hex. With two hexadecimal numbers we can count up to FF which is equal to decimal 255. Likewise, to count higher than FF we would add a third hexadecimal digit to the left so the first 3-bit hexadecimal number would be 100_{16,} (256_{10}) and the last would be FFF_{16,} (4095_{10}). The maximum 4-digit hexadecimal number is FFFF_{16} which is equal to 65,535 in decimal and so on.

### Representation of a Hexadecimal Number

MSB | Hexadecimal Number | LSB | ||||||

16^{8} |
16^{7} |
16^{6} |
16^{5} |
16^{4} |
16^{3} |
16^{2} |
16^{1} |
16^{0} |

4.3G | 2.6G | 16M | 1M | 65k | 4k | 256 | 16 | 1 |

This adding of additional hexadecimal digits to convert both decimal and binary numbers into an **Hexadecimal Number** is very easy if there are 4, 8, 12 or 16 binary digits to convert. But we can also add zero’s to the left of the most significant bit, the MSB if the number of binary bits is not a multiple of four.

For example, 11001011011001_{2} is a fourteen bit binary number that is to large for just three hexadecimal digits only, yet too small for a four hexadecimal number. The answer is to ADD additional zero’s to the left most bit until we have a complete set of four bit binary number or multiples thereof.

### Adding of Additional 0’s to a Binary Number

Binary Number | 0011 | 0010 | 1101 | 1001 |

Hexadecimal Number | 3 | 2 | D | 9 |

The main advantage of a **Hexadecimal Number** is that it is very compact and by using a base of 16 means that the number of digits used to represent a given number is usually less than in binary or decimal. Also, it is quick and easy to convert between hexadecimal numbers and binary.

## Hexadecimal Numbers Example No1

Convert the following Binary number 1110 1010_{2} into its Hexadecimal number equivalent.

Binary Number = 11101010_{2} |
|||

Group the bits into four’s starting from the right hand side | |||

= | 1110 | 1010 | |

Find the Decimal equivalent of each individual group | |||

= | 14 | 10 | (in decimal) |

Convert to Hexadecimal using the table above | |||

= | E | A | (in Hex) |

Then, the hexadecimal equivalent of the binary number
1110 1010 |

## Hexadecimal Numbers Example No2

Convert the following Hexadecimal number #3FA7_{16} into its Binary equivalent, and also into its Decimal or Denary equivalent using subscripts to identify each numbering system.

#3FA7_{16} |

= 0011 1111 1010 0111_{2} |

= (8192 + 4096 + 2048 + 1024 + 512 + 256 + 128 + 32 + 4 + 2 + 1) |

= 16,295_{10} |

Then, the Decimal number of **16,295** can be represented as:-

#3FA7_{16} in Hexadecimal

or

0011 1111 1010 0111_{2} in Binary.

## Hexadecimal Numbers Summary

Then to summarise. The **Hexadecimal**, or **Hex**, numbering system is commonly used in computer and digital systems to reduce large strings of binary numbers into a sets of four digits for us to easily understand. The word “Hexadecimal” means sixteen because this type of digital numbering system uses 16 different digits from 0-to-9, and A-to-F.

Hexadecimal Numbers group binary numbers into sets of four digits. To convert a binary sequence into an equivalent *hexadecimal number*, we must first group the binary digits into a set of 4-bits. These binary sets can have any value from 0_{10} ( 0000_{2} ) to 15_{10} ( 1111_{2} ) representing the hexadecimal equivalent of 0 through to F.

In the next tutorial about Binary Logic we will look at converting whole strings of binary numbers into another digital numbering system called **Octal Numbers** and vice versa.