Hexadecimal Subtraction and MultiplicationDate: 04/06/2000 at 11:53:40
From: Peggy Schnurr
Subject: Hexadecimal multiplication
I understand adding hexadecimal numbers, but I'm having trouble
understanding multiplication and subtraction of hexadecimal numbers. I
would appreciate any direction you can offer on the subject.
Thank you.
Peggy Schnurr
Date: 04/06/2000 at 17:21:07
From: Doctor TWE
Subject: Re: Hexadecimal multiplication
Hi Peggy - thanks for writing to Dr. Math.
Let's tackle subtraction first. Subtraction in hexadecimal works
similar to subtraction in decimal. Let's do a pair of decimal problems
and see if we can "parallel" the solution method in hex.
Suppose we want to subtract 1586 - 243 (in decimal). We write the
subtrahend (the number to be subtracted) underneath the minuend (the
number to subtract from), lining up the place values at the decimal
point - or at the right if there is no decimal point - like this:
1586
- 243
----
Now, starting from the right, we subtract the digits. (Ones place)
6-3 = 3, (tens place) 8-4 = 4, (hundreds place) 5-2 = 3, (thousands
place) 1-0 = 1. It looks like this:
1586
- 243
----
1343
We do the same thing in hexadecimal, except that we occasionally have
a digit larger than 9. For example, suppose we want to subtract
5CD2 - 2A0 (hexadecimal). As with decimal, we write the subtrahend
(the number to be subtracted) underneath the minuend (the number to
subtract from), lining up the place values at the radix point - or at
the right if there is no radix point - like this:
5CD2 h (The 'h' just indicates a hexadecimal value)
- 2A0 h
------
Now, starting from the right, we subtract the digits. (Ones place)
2-0 = 2, (sixteens place) D-A = 13-10 = 3, (256's place)
C-2 = 12-2 = 10 = A, (4096's place) 5-0 = 5. It looks like this:
5CD2 h
- 2A0 h
------
5A32 h
That's fine - until you get a place value in which there's not enough
to subtract from. What do we do in decimal? We borrow from the next
higher place value. For example, suppose we want to subtract
3145 - 1976 (decimal). We'll align our numbers:
3 1 4 5
- 1 9 7 6
----------
Now in the ones place, we can't subtract 6 from 5 (5 is less than 6)
so we borrow 1 from the tens place. Since that has a place value (a
"weight") of ten, we can exchange it for 10 ones. (This is kind of
like changing a $10 bill into ten $1 bills.) This leaves us with 3
tens (4 minus the 1 we borrowed) and gives us 15 ones (5 plus the 10
we got from the borrow). We now subtract 15-6 = 9:
3 15
3 1 \ \ (There was a 4 and a 5 under the '\'s)
- 1 9 7 6
----------
9
Similarly in the tens place, we can't subtract 7 from 3 so we borrow
one from the hundreds place. Since that has a place value (a "weight")
of one hundred, we can exchange it for 10 tens. (This is kind of like
changing a $100 bill into ten $10 bills.) This leaves us with no
hundreds (1 minus the 1 we borrowed) and gives us 13 ones (the 3 left
over after the previous borrow plus the 10 we got from this borrow).
We now subtract 13-7 = 6:
0 13 15
3 \ \ \
- 1 9 7 6
----------
6 9
We do the same for the hundreds, borrowing 1 from the thousands, then
subtract the thousands. We end up like this:
2 10 13 15
\ \ \ \
- 1 9 7 6
----------
1 1 6 9
Why did we get 10 from each borrow? Because each time, the next place
value was 10 times as large. This is because decimal is base-10.
Now let's look at a hexadecimal problem that requires borrowing. For
example, suppose we want to subtract A8D2 - 3EAC (hexadecimal). We'll
align our numbers:
A 8 D 2 h
- 3 E A C h
-------------
Now in the ones place, we can't subtract C (12) from 2 so we borrow 1
from the sixteens place. Since that has a place value (a "weight") of
sixteen, we can exchange it for 16 ones. (This is kind of like
changing a $16 bill into sixteen $1 bills.) This leaves us with 12
sixteens (D = 13 minus the 1 we borrowed) and gives us 18 ones (2 plus
the 16 we got from the borrow). We now subtract 18-12 = 6:
(Note that I use decimal here. Some people
12 18 write these as Ch and 12h.)
A 8 \ \ h (There was a D and a 2 under the '\'s)
- 3 E A C h
-------------
6 h
In the sixteens place, we don't need to borrow because we can subtract
10 (A) from 12:
12 18
A 8 \ \ h
- 3 E A C h
-------------
2 6 h
In the 256's place, we again need to borrow. We'll borrow 1 from the
4096's place and exchange it for sixteen 256's (one 4096 equals
sixteen 256's). This leaves us 9 in the 4096's place (A = 10 minus the
1 that we borrowed), and gives us 24 in the 256's place (8 plus the 16
from the borrow). We then can subtract 24-14 = 10 = A. So we have:
9 24 12 18
\ \ \ \ h
- 3 E A C h
-------------
A 2 6 h
Finally, we subtract 9-3 = 6 in the 4096's place:
9 24 12 18
\ \ \ \ h
- 3 E A C h
-------------
6 A 2 6 h
Why did we get 16 from each borrow? Because each time, the next place
value was 16 times as large. This is because hexadecimal is base-16.
One final note: If the subtrahend (the bottom number) is larger than
the minuend (the top number), flip the numbers around and make the
final answer negative, just as you would in decimal.
I'll send you information on multiplication tomorrow, as I have run
out of time today. (I have a 5-year old I must pick up from
kindergarten.)
I hope this helps. If you have any more questions, write back.
- Doctor TWE, The Math Forum
http://mathforum.org/dr.math/
Date: 04/06/2000 at 13:04:55
From: Doctor Peterson
Subject: Re: Hexadecimal multiplication
Hi, Peggy.
All the operations work exactly the same in any base, as long as you
use the right tables and remember to use the base when you carry or
borrow.
For example, here's 25 x 3A (37 x 58 base 10):
25
x 3A
----
32 A x 5 (10 x 5 = 50)
14 A x 2 (10 x 2 = 20)
F 3 x 5 (3 x 5 = 15)
6 3 x 2 (3 x 2 = 6)
----
862 = 2146 (base 10)
I wrote out each product of a pair of digits here, to save carrying,
and to show explicitly the four numbers you would get from a
multiplication table (though I just multiplied each pair in base 10
and converted to base 16); normally you'd write it as
25
x 3A
----
172 = 32 + 140
6F = F + 60
----
862
Here, for example, 5 x A = 32, so I put down 2 and carried the 3,
which I added to the result of A x 2 = 14 to get 17. When I added the
partial products, I found that 7+F = 16, so I put down the 6 and
carried the 1.
If you haven't looked at our FAQ on number bases, please do so:
http://mathforum.org/dr.math/faq/faq.bases.html
If there's something you still have trouble with, show me your work on
a sample problem so I can see what part to explain.
- Doctor Peterson, The Math Forum
http://mathforum.org/dr.math/
Date: 04/07/2000 at 11:05:47
From: Doctor TWE
Subject: Re: hexadecimal multiplication
Hi again, Peggy.
I see Dr. Peterson has already answered you regarding multiplication.
But since I had already constructed most of this response yesterday, I
thought I'd finish it and send it anyway.
Let's look at a decimal multiplication problem; for example 325 * 18.
Again, we align the numbers by the decimal point:
365
* 28
-----
We start with the ones digit of the multiplier (the bottom number). We
multiply this by the ones digit of the multiplicand (the top number),
8*5 = 40. We record the 0 in the ones digit of the first partial
product line, and keep the 4 as a carry:
4
365
* 28
-----
0
Next, we multiply the ones digit of the multiplier by the tens digit
of the multiplicand and add the carry; 8*6+4 = 48+4 = 52. We record
the 2 in the tens digit of the first partial product line, and keep
the 5 as a carry:
54
365
* 28
-----
20
Now we multiply the ones digit of the multiplier by the hundreds digit
of the multiplicand and add the carry; 8*3+5 = 24+5 = 29. We record
the 2 in the tens digit of the first partial product line. Since this
is the last digit of the multiplicand, we can bring down the carry and
record a 29:
254
365
* 28
-----
2920
Now we repeat the process with the tens digit of the multiplier, and
start our answer in the tens digit in the second partial product line.
I'll do this all at one (I hope you see how I got all this - I also
"erased" my earlier carries):
11
365
* 28
-----
2920
720
Finally, we add the partial products:
365
* 28
-----
2920
730
-----
10220
How did we know that 8*5 = 40, 2*6 = 12, etc.? We probably memorized
these as a multiplication table in elementary school. We'll need such
a multiplication table for hexadecimal. Here it is:
X | 0 1 2 3 4 5 6 7 8 9 A B C D E F
--+-----------------------------------------------
0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 | 0 1 2 3 4 5 6 7 8 9 A B C D E F
2 | 0 2 4 6 8 A C E 10 12 14 16 18 1A 1C 1E
3 | 0 3 6 9 C F 12 15 18 1B 1E 21 24 27 2A 2D
4 | 0 4 8 C 10 14 18 1C 20 24 28 2C 30 34 38 3C
5 | 0 5 A F 14 19 1E 23 28 2D 32 37 3C 41 46 4B
6 | 0 6 C 12 18 1E 24 2A 30 36 3C 42 48 4E 54 5A
7 | 0 7 E 15 1C 23 2A 31 38 3F 46 4D 54 5B 62 69
8 | 0 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78
9 | 0 9 12 1B 24 2D 36 3F 48 51 5A 63 6C 75 7E 87
A | 0 A 14 1E 28 32 3C 46 50 5A 64 6E 78 82 8C 96
B | 0 B 16 21 2C 37 42 4D 58 63 6E 79 84 8F 9A A5
C | 0 C 18 24 30 3C 48 54 60 6C 78 84 90 9C A8 B4
D | 0 D 1A 27 34 41 4E 5B 68 75 82 8F 9C A9 B6 C3
E | 0 E 1C 2A 38 46 54 62 70 7E 8C 9A A8 B6 C4 D2
F | 0 F 1E 2D 3C 4B 5A 69 78 87 96 A5 B4 C3 D2 E1
We do hexadecimal multiplication the same way we did the decimal, only
we use the hex multiplication table above and hex addition. For
example, 82E * B4. First, we align the numbers by the radix point:
82E
* B4
-----
We start with the ones digit of the multiplier and multiply this by
the ones digit of the multiplicand, 4*E = 38. We record the 8 in the
ones digit of the first partial product line, and keep the 3 as a
carry:
3
82E
* B4
-----
8
Next, we multiply the ones digit of the multiplier by the sixteens
digit of the multiplicand and add the carry; 2*4+3 = 8+3 = B. We
record the B in the tens digit of the first partial product line
(there's no carry this time):
3
82E
* B4
-----
B8
Now we multiply the ones digit of the multiplier by the 256's digit of
the multiplicand (we'd add the carry if we had one); 4*8 = 20. We
record the 0 in the sixteens digit of the first partial product line.
Since this is the last digit of the multiplicand, we can bring down
the carry and record a 20:
2 4
82E
* B4
-----
20B8
Now we repeat the process with the sixteens digit of the multiplier,
and start our answer in the sixteens digit in the second partial
product line. I'll do this all in one step (if you don't see how I got
all this, write back):
519
82E
* B4
-----
20B8
59FA
Finally, we add the partial products (in hexadecimal):
82E
* B4
-----
20B8
59FA
-----
5C058
I hope this helps. If you have any more questions, write back. |