首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2补体二进制乘法

2补体二进制乘法
EN

Stack Overflow用户
提问于 2014-11-18 14:28:07
回答 3查看 2.8K关注 0票数 2

我有点搞不懂我们怎么做签名2的补码乘法。

代码语言:javascript
复制
         10 1101        -19
       x 11 0001     x  -15
      ----------------  ------
          101101         285
         000000
        000000
       000000
      101101
     101101
    ----------------
   100010011101

加上所有的计算,我得到"100010011101“如前所述,而不是285个签名,为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-18 15:33:18

你在做没有签名的算术。要做2的补码,您需要将数字看作有无限重复的符号数字:

代码语言:javascript
复制
            ...1111101101
            ...1111111001
-------------------------
            ...1111101101
           ...0000000000
          ...0000000000
         ...0000000000
        ...1111101101
       ...1111101101
      ...1111101101
     ...1111101101
    ...1111101101
   ...1111101101
           :
-------------------------
      ...0000000100011101

您需要继续这个过程,直到它到达一个不动点为止(在这里,计算出的更多位数都是相同的)。结果是,在生成输出的n+m位时总是会发生这种情况(其中n和m是比特中乘数的大小),所以这很容易有界。

票数 1
EN

Stack Overflow用户

发布于 2014-11-18 15:10:55

如果你想得到正确的结果,你必须做一个数字的符号延伸到两倍多的位。

代码语言:javascript
复制
                       111111101101        
               x       111111110001
                       ------------
                       111111101101
                      000000000000
                     000000000000
                    000000000000
                   111111101101
                  111111101101
                 111111101101
                111111101101
               111111101101
              111111101101
             111111101101
      +     111111101101
            ----------------------
           000000000000000100011101
票数 0
EN

Stack Overflow用户

发布于 2014-11-18 15:24:30

将位扩展到全宽度并截断。

下面是一个4位的示例:

代码语言:javascript
复制
  1110   -2
* 1111   -1
------   --
  1110
  110
  10
+ 0
------
  0010    2

现在,使用8位(如果乘以字节)、16位(如果乘短)重复您的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26996660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档