我正在实现一个简单的(虚拟)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”。
所以,我的实际问题是:当左移时我还需要考虑符号位吗?
答案 0 :(得分:0)
是的,你这样做。
一种简单的方法可能是将符号保存在某处,转换为无符号,执行数学运算,然后转换回来,如果它是负数。