如何做两个补码乘法和整数除法?

时间:2013-12-27 01:57:03

标签: binary division multiplication bits twos-complement

我已经使用两个补码读取了这个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

计算乘法的一些逐步方法将是有帮助的。没有我遇到过关于分裂的文章。如何处理?

2 个答案:

答案 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

然后你就像其他任何数字一样将它们加在一起。

看起来其他人已经覆盖了乘法部分,所以我不会再费心了。