Binary, Decimal, Hexadecimal
2019-01-14
Representation of different bases, and converting to decimal
Decimal
We think of decimal as the base-10 system. The set of all decimal digits is \(\{0,1,2,3,4,5,6,7,8,9\}\).
Imagine we have a number 42 (base ten). We could rewrite it as each digit multiplied by a power of ten, like so: \(42 = 4 * 10^1 + 2 * 10^0\).
Binary
The set of all binary digits is \(\{0,1\}\).
The same idea is true for binary numbers, also known as the base-2 system. Imagine we have a number 101010 (base two). We could rewrite it as each digit multiplied by a power of two, like so: \(101010_2 = 1 * 2^5 + 0 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0\). If we wanted to get the decimal version of this, we could just simplify: \(1 * 2^5 + 1 * 2^3 + 1 * 2^1 = 32 + 8 + 2=42\).
Hexadecimal
The set of all hexadecimal digits is \(\{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F\}\), where A-F have decimal values of 10-15 respectively.
The same idea is true for hexadecimal numbers, also known as the base-16 system. Imagine we have a number 2A (base sixteen). We could rewrite it as each digit multiplied by a power of sixteen, like so: \(2A_{16} = 2 * 16^1 + 10 * 16^0\). If we wanted to get the decimal version of this, we could just simplify: \(2 * 16^1 + 10 * 16^0 = 32 + 10 = 42\).
Bringing it together: binary and hexadecimal to decimal
Above, we have seen that finding the value of a binary or hexadecimal number in decimal simply requires writing out each digit multiplied by its place value and then simplifying.
Converting decimal to binary or hexadecimal by repeated division
A technique for converting to either binary or hexadecimal is to take the number in decimal and successively divide by either 2 or 16 (depending on the target base), using the remainders to construct the resultant number. Say we want to convert 42 to binary. We would start to divide by 2:
\[ \require{enclose} \begin{array}{rll} 21\\[-3pt] 2 \enclose{longdiv}{42}\kern-.2ex \\[-3pt] \underline{42} \\[-3pt] 0 \\[-3pt] \end{array} \]
Now, we know that the rightmost digit of the resulting binary number is 0, as that is the remainder of the division. We continue by dividing the previous quotient again:
\[ \require{enclose} \begin{array}{rll} 10\\[-3pt] 2 \enclose{longdiv}{21}\kern-.2ex \\[-3pt] \underline{20} \\[-3pt] 1 \\[-3pt] \end{array} \]
The remainder is 1, so the next digit to the left is a 1. Continue dividing until the quotient is 0 (the intermediate three divisions are left as an exercise for the reader):
\[ \require{enclose} \begin{array}{rll} 0\\[-3pt] 2 \enclose{longdiv}{1}\kern-.2ex \\[-3pt] \underline{0} \\[-3pt] 1 \\[-3pt] \end{array} \]
The final remainder is 1, so the leftmost digit of the resulting binary number is 1. Writing all the results next to each other, we get a result of 101010.
The same technique works for converting to hexadecimal (simply divide by 16 repeatedly instead of 2). This technique generalizes to other bases as well.