2014-02-21 76 views
0

我正在實現一個簡單的(虛擬)ALU和一些其他芯片(加法器,乘法器等)。左移2的補碼和乘法

我對我的數字使用2的補碼錶示法。

對於x和y的乘法,兩個16位數字,我想我使用左移沿着這些線(這是不實際的環路進行當然):

  • 集總結[0..15] = 0

  • 組x'= X

  • 對於i = 0 ... 15 //(Y [0]是LSB和y [15]是MSB)

    • 如果y [i] = 1並且移位x'離開,則將x'加和。

(這是標準的方式?)

我的問題是與左移:

如果有我S.T. x [i] = 1,在某點x'的MSB將變爲1,並且否定它。

這是一個問題,因爲例如2 * 2使用上面的方法給出了「-4」。

所以,我的實際問題是:當向左移動時,我是否還需要考慮符號位?

回答

0

是的,你這樣做。

一個簡單的方法可以是將符號保存在某個地方,轉換爲無符號數,執行數學運算,如果是負數則轉換回去。

+0

所以左移0110 0000 0000 0000應該產生:0100 0000 0000 0000?而且,保存標誌還是不夠,移位,然後用原來的符號代替當前標誌位? – Paz

+0

這是溢出情況,但是。 - 不,您必須將標誌轉換爲NEG或類似標誌。在二進制補碼中,-1表示全1,依此類推。 –