0

我正在实现一个简单的(虚拟)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”。

所以,我的实际问题是:左移时我还需要考虑符号位吗?

4

1 回答 1

0

是的你是。

一个简单的方法可能是将符号保存在某处,转换为无符号,执行数学运算,然后如果它是负数则转换回来。

于 2014-02-21T11:06:22.047 回答