向左移动2的补码和乘法

时间:2014-02-21 11:01:48

标签: boolean-logic alu

我正在实现一个简单的(虚拟)ALU和其他一些芯片(加法器,乘法器等)。

我正在使用2的补码表示来表示我的数字。

对于x和y的乘法,两个16位数,我以为我会沿着这些行使用左移(这当然是在没有实际循环的情况下执行的):

  
      
  • 设置总和[0..15] = 0

  •   
  • 设置x'= x

  •   
  • 对于i = 0 ... 15 //(y [0]是LSB而y [15]是MSB)

         
        
    • 如果y [i] = 1并且向左移动x',则将x'加到sum。
    •   
  •   

(这是标准方式吗?)

我的问题在于左移:

如果有我的话。 x [i] = 1,在某些时候,x'的MSB将变为1,并且否定它。

这是一个问题,因为例如2 * 2使用上面的方法给出了“-4”。

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

1 个答案:

答案 0 :(得分:0)

是的,你这样做。

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