Useful
Number Systems
Decimal Base = 10
Digit Set = {0, 1, 2, 3, 4, 5, 6,
7, 8, 9}
Binary Base = 2
Digit Set = {0, 1}
Octal Base = 8 = 23
Digit Set = {0, 1, 2, 3, 4, 5, 6,
7}
Hexadecimal Base = 16 = 24
Digit Set = {0, 1, 2, 3, 4, 5, 6,
7, 8, 9, A, B, C, D, E, F}
Common notation:
Leading 0 denotes octal 077
is an octal number, same as decimal 63
Leading 0x denotes hexadecimal 0x77
is hexadecimal (decimal 119)
Binary,
Decimal, and Hexadecimal Equivalents
Binary Decimal Hexadecimal
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F
Conversion
Between Binary and Hexadecimal
This is easy, just group the
bits. Recall that
A = 1010 B = 1011 C = 1100
D = 1101 E = 1110 F = 1111
Problem:
Convert 10011100 to hexadecimal.
1. Group
by fours 1001 1100
2. Convert
each group of four 0x9C
Problem:
Convert1111010111 to hexadecimal.
1. Group
by fours (moving right to left) 11 1101 0111
Group by fours 0011 1101
0111
2. Convert
each group of four 0x3D7
Problem: Convert 0xBAD1 to binary
1. Convert
each hexadecimal digit: B A D 1
1011 1010 1101 0001
2. Group the binary
bits 1011101011010001
Conversion
Between Binary and Decimal
Conversion between
hexadecimal and binary is easy because 16 = 24.
In my book, hexadecimal is just a convenient “shorthand” for binary.
Thus, four hex digits stand for 16 bits, 8 hex digits for 32 bits, etc.
But 10 is not a power of 2,
so we must use different methods.
Conversion from Binary to Decimal
This is based on standard
positional notation.
Convert each “position” to
its decimal equivalent and add them up.
Conversion from Decimal to Binary
This is done with two
distinct algorithms, one for the digits to the left of
the decimal point (the whole number part) and one for digits to the right.
At this point we ignore
negative numbers.
Powers of
Two
Students should memorize the
first ten powers of two.
20
= 1
21 = 2 2–1 = 0.5
22 = 4 2–2 = 0.25
23 = 8 2–3 = 0.125
24
= 16 2–4 =
0.0625
25 = 32 2–5 = 0.03125
26 = 64 etc.
27 = 128
28 = 256
29 = 512
210 = 1024
10111.011 = 1·24 + 0·23 + 1·22 + 1·21 + 1·20 + 0·2-1 + 1·2-2 + 1·2-3
= 1·16 + 0·8 + 1·4 + 1·2 + 1·1 + 0·0.5 + 1·0.25 + 1·0.125
= 23.375
Conversion of Unsigned Decimal to Binary
Again, we continue to ignore negative numbers.
Problem: Convert 23.375 to binary. We already know the answer.
One
solution.
23.375 = 16
+ 4 + 2 + 1 + 0.25 + 0.125
= 1·24 + 0·23 + 1·22 + 1·21 + 1·20 + 0·2-1 + 1·2-2 + 1·2-3
= 10111.011
This solution is preferred by your instructor, but
most students find it
confusing and prefer to use the method to be discussed next.
Side point: Conversion of
the above to hexadecimal involves grouping
the bits by fours as
follows:
Left of decimal: by
fours from the right
Right of decimal: by
fours from the left.
Thus the number is 00010111.0110, or 0001 0111.0110 or
0x17.6
But 0x17.6 = 1·16 + 7·1 + 6/16 = 23 + 3/8 = 23.375
Conversion of the “Whole Number” Part
This is done by repeated division, with the remainders
forming the binary
number. This set of remainders is read
“bottom to top”
Quotient Remainder
23/2 = 11 1 Thus decimal 23 = binary 10111
11/2 = 5 1
5/2 = 2 1 Remember to read the binary
2/2 = 1 0 number from bottom to top.
1/2 = 0 1 As expected, the number is 10111
Another example: 16
Quotient Remainder
16/2 = 8 0
8/2 = 4 0
4/2 = 2 0 Remember to read the binary
2/2 = 1 0 number from bottom to top.
1/2 = 0 1 The number is 10000 or 0x10
Convert the Part to the Right of the Decimal
This is done by a simple variant of multiplication.
This is easier to show than to describe.
Convert 0.375
Number Product Binary
0.375 x 2 = 0.75 0
0.75 x 2 = 1.5 1 Read
top to bottom as .011
0.5 x 2 = 1.0 1
Note that the multiplication involves dropping the
leading ones from the product terms, so that our products are 0.75, 1.5, 1.0,
but we would multiply only the numbers 0.375, 0.75, 0.50, and (of course) 0.0.
Another
example: convert 0.71875
Number Product Binary
0.71875 x2 = 1.4375 1
0.4375 x 2 = 0.875 0 Read
top to bottom as .10111
0.875 x 2 = 1.75 1 or
as .1011100000000 …
0.75 x 2 = 1.5 1 with
as many trailing zeroes as you like
0.5 x
2 = 1.0 1
0.0 x
2 = 0.0 0
Convert an “Easy” Example
Consider the decimal number 0.20. What is its binary representation?
Number Product Binary
0.20 · 2 = 0.40 0
0.40 · 2 = 0.80 0
0.80 · 2 = 1.60 1
0.60 · 2 = 1.20 1
0.20 · 2 = 0.40 0
0.40 · 2 = 0.80 0
0.80 · 2 = 1.60 1 but
we have seen this – see four lines above.
So 0.20 decimal has binary representation .00 1100 1100 1100 ….
Terminating
and Non–Terminating Numbers
A fraction has a terminating
representation in base–K notation only if the number can be represented in the
form J / (BK)
Thus the fraction 1/2 has a terminating decimal
representation because it is
5 / (101). It can also be 50
/ (102), etc.
More on Non–Terminators
What about a decimal representation for 1/3?
If we can generate a terminating decimal
representation, there must be positive integers J and K such that 1 / 3 = J /
(10K). But 10 = 2·5, so this becomes
1 / 3 = J
/ (2K · 5K).
Cross multiplying, and recalling that everything is a
positive integer, we have
3·J = (2K · 5K)
If the equation holds, there must be a “3” on the
right hand side. But there cannot be a
“3” on this side, as it is only 2’s and 5’s.
Now, 0.20 = 1 / 5 has a terminating binary
representation only if it has a representation of the form J / (2K).
This becomes 1 / 5 = J / (2K), or 5·J = 2K.
But no 5’s on the RHS.
Because numbers such as 1.60 have no exact binary
representation, bankers and others who rely on exact arithmetic prefer BCD
arithmetic, in which exact representations are possible.