Hexadecimal Notation
Hexadecimal notation is just another base for representing numbers in, like binary.
In hexadecimal, there are 16 digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, and F. 0 through 9 preserve their normal meaning, and A through F in hexadecimal is 10 through 15 in decimal notation. As any base, we can calculate the value of a given number, say 1CA, by writing the whole number out extensively. 1CA in hexadecimal is the same as:
A*10^0 + C*10^1 + 1*10^2
In decimal, this means
10*16^0 + 12*16^1 + 1*16^2
Let's find out what this number is:
10 + 12*16 + 16*16 = 10 + 192 + 256 = 202 + 256 = 458
So 1CA in hexadecimal is the same as 458 in decimal notation.
Hexadecimal notation is useful because it allows you to use powers of two easily without having to write everything out in binary. Converting from hexadecimal to binary is easy: every hexadecimal number is 4 bits, so each hex digit corresponds to a sequence of 4 bits.
| Hex | Binary | Base 10 |
|---|---|---|
| 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 |
| A | 1010 | 10 |
| B | 1011 | 11 |
| C | 1100 | 12 |
| D | 1101 | 13 |
| E | 1110 | 14 |
| F | 1111 | 15 |
To convert a long number, just replace the hexadecimal digits with their corresponding sequence of bits. For example,
1CA (hex) = 0001 1100 1010 (bin) = 111001010 (bin)
Two hexadecimal digits correspond exactly to one byte, unlike the strange 255 limit in decimal, the hexadecimal byte limit is FF.
Notation in programming languages
In programming languages and most assemblers, a hexadecimal number is usually prefixed with 0x to make the compiler aware that you are using hexadecimal. For example:
0x123 0x0 0xABCDEF 0xCD
The other alternate notation known as the Intel hex notation, which suffixes hexadecimal numbers with a h letter, matching the b suffix for binary. This notation is supported by most x86 assemblers.