【问题标题】:how to do two complement multiplication and division of integers?如何进行整数的两个补码乘法和除法?
【发布时间】:2014-01-14 15:11:23
【问题描述】:

我已阅读此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

一些逐步计算乘法的方法会有所帮助。我没有看到关于分裂的文章。如何解决这个问题?

【问题讨论】:

    标签: binary division multiplication bits twos-complement


    【解决方案1】:

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

    for 4-bit --> 1111, you would extend as 1111 1111
    for 4-bit --> 0111,you would extend as 0000 0111
    

    第 2 步:做初等乘法

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

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

    让我用你提供的例子来说明:-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) 
    

    你可以得到更多细节here;

    除法:转换为正数,计算后调整符号。我将把它留作练习,但你可以参考这个page

    【讨论】:

    • 如果我只允许使用 4 位表示,并且不能扩展到 8 位,该怎么办
    • @eagertoLearn:加倍位用于计算目的,最终结果中不需要。但是,请注意,4 位位可以容纳的最大值是 2^4-1,即 15
    • 乘法不需要扩展为双倍宽度。只需做数学模型 16。
    • @RaymondChen:数学模型 16 是什么意思?能详细点吗?
    • @user1988876 虽然 4 位 unsigned 值最多允许 15 个,但我们正在使用有符号值,这意味着 4 位只能使我们达到 7。
    【解决方案2】:

    好的,让我们看看我是否可以为你做的足够简单。

    补码: 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
    

    然后您只需将它们加在一起,就像添加任何其他数字一样。

    而且看起来其他人已经涵盖了乘法部分,所以我不会费心重复。

    【讨论】:

    • 没问题。够清楚吗?在我们两个之间,我们是否错过了您问题的任何部分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2011-02-12
    • 2015-10-18
    • 1970-01-01
    相关资源
    最近更新 更多