我正在实现一个简单的(虚拟)ALU 和其他一些芯片(加法器、乘法器等)。
我使用 2 的补码表示我的数字。
对于 x 和 y 这两个 16 位数字的乘法,我想我会沿着这些线使用左移(这当然是在没有实际循环的情况下执行的):
设置总和[0..15]=0
设置 x'=x
for i=0...15 //(y[0] 是 LSB,y[15] 是 MSB)
- 如果 y[i]=1,则将 x' 加到 sum 上,然后将 x' 左移。
(这是标准方式吗?)
我的问题是左移:
如果有 i st x[i]=1,在某个时候 x' 的 MSB 将变为 1,这将否定它。
这是一个问题,因为例如 2*2 使用上述方法给出“-4”。
所以,我的实际问题是:左移时我还需要考虑符号位吗?