【问题标题】:2's complement binary multiplication2 的补码二进制乘法
【发布时间】:2014-11-18 14:28:07
【问题描述】:

我对我们如何执行有符号 2 的补码乘法有点困惑。

         10 1101        -19
       x 11 0001     x  -15
      ----------------  ------
          101101         285
         000000
        000000
       000000
      101101
     101101
    ----------------
   100010011101

添加所有计算,我得到“100010011101”,如上所述,它不是 285 签名的,为什么?

【问题讨论】:

    标签: binary division multiplication bits twos-complement


    【解决方案1】:

    你正在做无符号算术。要进行二进制补码,您需要将数字视为具有无限重复的符号数字:

                ...1111101101
                ...1111111001
    -------------------------
                ...1111101101
               ...0000000000
              ...0000000000
             ...0000000000
            ...1111101101
           ...1111101101
          ...1111101101
         ...1111101101
        ...1111101101
       ...1111101101
               :
    -------------------------
          ...0000000100011101
    

    你需要继续这个过程,直到它到达一个固定点(计算的更多位都相同。)事实证明,这总是会在你产生 n+m 位输出(其中 nm 是被乘数的大小,以位为单位),所以这很容易有界。

    【讨论】:

    • 我很困惑你是如何得出这个答案的。你做了额外的权利?我理解位 0 到 4。对于位 5,我们有 2 个,所以我们写一个 0 并将 1 进位到位 6。位 6 有 3 个 1 + 1 结转 = 4 个,那么我们现在该怎么办?跨度>
    • @MaTaKazar: 4 在二进制中是 100,所以结果是 0 并携带 10。您可以将其视为将 '2' 携带到下一列,或者将两列向上携带 - - 最终结果是一样的。
    【解决方案2】:

    将位扩展到全宽并截断

    这是一个 4 位示例:

      1110   -2
    * 1111   -1
    ------   --
      1110
      110
      10
    + 0
    ------
      0010    2
    

    现在重复您的示例,如果乘以字节,则使用 8 位,如果乘以短裤,则使用 16 位

    【讨论】:

      【解决方案3】:

      如果您想要正确的结果,您必须将数字的 sign extension 增加到两倍的位数。

                             111111101101        
                     x       111111110001
                             ------------
                             111111101101
                            000000000000
                           000000000000
                          000000000000
                         111111101101
                        111111101101
                       111111101101
                      111111101101
                     111111101101
                    111111101101
                   111111101101
            +     111111101101
                  ----------------------
                 000000000000000100011101
                                  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 1970-01-01
        • 2012-09-21
        • 2015-04-12
        • 1970-01-01
        相关资源
        最近更新 更多