我有点搞不懂我们怎么做签名2的补码乘法。
10 1101 -19
x 11 0001 x -15
---------------- ------
101101 285
000000
000000
000000
101101
101101
----------------
100010011101加上所有的计算,我得到"100010011101“如前所述,而不是285个签名,为什么?
发布于 2014-11-18 15:33:18
你在做没有签名的算术。要做2的补码,您需要将数字看作有无限重复的符号数字:
...1111101101
...1111111001
-------------------------
...1111101101
...0000000000
...0000000000
...0000000000
...1111101101
...1111101101
...1111101101
...1111101101
...1111101101
...1111101101
:
-------------------------
...0000000100011101您需要继续这个过程,直到它到达一个不动点为止(在这里,计算出的更多位数都是相同的)。结果是,在生成输出的n+m位时总是会发生这种情况(其中n和m是比特中乘数的大小),所以这很容易有界。
发布于 2014-11-18 15:10:55
如果你想得到正确的结果,你必须做一个数字的符号延伸到两倍多的位。
111111101101
x 111111110001
------------
111111101101
000000000000
000000000000
000000000000
111111101101
111111101101
111111101101
111111101101
111111101101
111111101101
111111101101
+ 111111101101
----------------------
000000000000000100011101发布于 2014-11-18 15:24:30
将位扩展到全宽度并截断。
下面是一个4位的示例:
1110 -2
* 1111 -1
------ --
1110
110
10
+ 0
------
0010 2现在,使用8位(如果乘以字节)、16位(如果乘短)重复您的示例。
https://stackoverflow.com/questions/26996660
复制相似问题