问题
I have read this post on binary multiplication using two complement. but it is not very clear to me. Even I have difficulty understanding the wiki article on this. I want to know how to go about calculating multiplications of negative numbers:
eg: -1 with -7 should give 7.
A 4-bit, 2's complement of -1 is : 1111
A 4-bit, 2's complement of -7 is : 1001
some step-wise way of calculating the multiplication will be helpful. No article I came across talks about division. How to approach this?
回答1:
step 1: sign extend
both integers to twice as many bits. This is safe to do, though may not always be necessary.
for 4-bit --> 1111, you would extend as 1111 1111
for 4-bit --> 0111,you would extend as 0000 0111
step 2: do elementary multiplication
sep 3: take the correct number of result bits from the least significant portion of the result.
eg: after multiplication, you end up with something such as 0010011110
take the last 8 bits i.e 10011110
Let me illustrate with the example you provided: -1 X -7
in 4-bit representation
1111 1111 -1
x 1111 1001 x -7
---------------- ------
11111111 7
00000000
00000000
11111111
11111111
11111111
11111111
11111111
----------------
1 00000000111 ---> 7 (notice the Most significant bit is zer``o)
-------- (last 8-bits needed)
you could get more details here;
for division: convert to positive and after the calculation adjust the sign. I will leave this as exercise but you could refer this page.
回答2:
Okay, let's see if I can make this simple enough for you.
Two's complement: IFF (If and only if) you have a negative number, first put it into the positive form. For sake of simplicity, all numbers will be 6 bit. The limit of the bits will limit how big your numbers can go. Besides that, what the size is doesn't matter.
Some numbers converted to their positive binary form -7: 000111 16: 010000 -22: 010110 1: 000001
Now for -7 and -23 ONLY we'll do two's complement on. So we flip the bits (1 -> 0 && 0 -> 1) and then add one.
000111
Goes to the complement + 1
111000
+ 1
=111001
And for 22
010110
Goes to the complement + 1
101001
+ 1
=101010
Then you just add them together like you would any other number.
And it looks like somebody else already covered the multiplication part, so I won't bother repeating that.
来源:https://stackoverflow.com/questions/20793701/how-to-do-two-complement-multiplication-and-division-of-integers