我对如何执行有符号2的补码乘法感到有些困惑。
10 1101 -19
x 11 0001 x -15
---------------- ------
101101 285
000000
000000
000000
101101
101101
----------------
100010011101
添加所有的计算我得到的“100010011101”不是285签名,为什么?
答案 0 :(得分:1)
你正在做无符号算术。要做两个补码,你需要将数字视为具有无限重复的符号数字:
...1111101101
...1111111001
-------------------------
...1111101101
...0000000000
...0000000000
...0000000000
...1111101101
...1111101101
...1111101101
...1111101101
...1111101101
...1111101101
:
-------------------------
...0000000100011101
你需要继续这个过程,直到达到一个固定点(计算的其他位数都是相同的。)事实证明,这总是在你产生 n + m 输出位(其中 n 和 m 是被乘数的大小),因此很容易限制。
答案 1 :(得分:0)
如果您想要正确的结果,您必须将数字的 sign extent 设为两倍的位数。
111111101101
x 111111110001
------------
111111101101
000000000000
000000000000
000000000000
111111101101
111111101101
111111101101
111111101101
111111101101
111111101101
111111101101
+ 111111101101
----------------------
000000000000000100011101
答案 2 :(得分:0)
将位扩展为全宽并截断
这是一个4位的例子:
1110 -2
* 1111 -1
------ --
1110
110
10
+ 0
------
0010 2
现在使用8位重复您的示例,如果乘以字节,如果乘以短路则为16位