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

eag*_*arn 14 binary bits multiplication division twos-complement

我已经阅读了关于使用两个补码的二进制乘法的这篇文章.但对我来说不是很清楚.即使我很难理解维基文章.我想知道如何计算负数的乘法:

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
Run Code Online (Sandbox Code Playgroud)

计算乘法的一些逐步方法将是有帮助的.没有我遇到过关于分裂的文章.怎么解决这个问题?

bra*_*orm 12

第1步:sign extend两个整数到两倍的位数.这样做是安全的,但并不总是必要的.

for 4-bit --> 1111, you would extend as 1111 1111
for 4-bit --> 0111,you would extend as 0000 0111
Run Code Online (Sandbox Code Playgroud)

第2步:做基本乘法

sep 3:从结果的最低有效部分中获取正确数量的结果位.

例如:在乘法之后,你得到的东西比如0010011110取最后的8位即10011110

让我用你提供的例子来说明:-1 X -7用4位表示

         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) 
Run Code Online (Sandbox Code Playgroud)

你可以在这里获得更多细节;

对于除法:转换为正数并在计算后调整符号.我将把它留作练习,但你可以参考这个页面.

  • 乘法不需要扩展到双倍宽度.只做数学模型16. (2认同)
  • @user1988876虽然4位**无符号**值最多允许15,但我们正在使用有符号值,这意味着4位只能得到7。 (2认同)