我已经使用两个补码读取了这个post二进制乘法。但对我来说不是很清楚。即使我很难理解wiki这篇文章。我想知道如何计算负数的乘法:
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
计算乘法的一些逐步方法将是有帮助的。没有我遇到过关于分裂的文章。如何处理?
答案 0 :(得分:11)
步骤1:sign extend
两个整数到两倍的位数。这样做是安全的,但并不总是必要的。
for 4-bit --> 1111, you would extend as 1111 1111
for 4-bit --> 0111,you would extend as 0000 0111
第2步:做基本乘法
第3步:从结果的最低有效部分中获取正确数量的结果位。
例如:在乘法之后,你得到的结果是0010011110
取最后8位,即10011110
让我用您提供的示例来说明:{4}表示中的-1 X -7
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)
您可以获得更多详细信息here;
用于除法:转换为正数并在计算后调整符号。我将此作为练习,但您可以参考page。
答案 1 :(得分:4)
好的,让我们看看我是否可以为你做这么简单。
两个补码: IFF(当且仅当)你有一个负数,首先把它放到正数形式。为简单起见,所有数字都是6位。这些位的限制将限制你的数字可以达到多大。除此之外,大小并不重要。
某些数字转换为正二进制形式 -7:000111 16:010000 -22:010110 1:000001
现在为-7和-23,我们只会做两个补码。所以我们翻转位(1 - > 0&& 0 - > 1)然后加一个。
000111
Goes to the complement + 1
111000
+ 1
=111001
22岁
010110
Goes to the complement + 1
101001
+ 1
=101010
然后你就像其他任何数字一样将它们加在一起。
看起来其他人已经覆盖了乘法部分,所以我不会再费心了。