2013-02-01 79 views
0

我與一些二進制數字打交道,試圖來連接數字。在這種情況下,我會得到我想要的東西:串聯一個負數二進制數

num = 0; 
    num = (num<<3)|4; 
    num = (num<<9)|7; 

這將設置NUM到100000000111,或者0x0807如果我格式化爲4個十六進制數字。

但是,如果我嘗試連接一個負數:

num = 0; 
    num = (num<<3)|4; 
    num = (num<<9)|-7; 

我得到0xFFF9,當我想要得到0x09F9。右邊的9位似乎是正確的,但似乎左邊的一些位正在翻轉。我猜測,當我執行邏輯或否定時,符號位被移動到最左邊的位或某物。有什麼辦法可以防止這種情況發生?

而且,我知道,在我的例子,我可以只設置NUM無需換擋次數,但在我實際的程序,這些都是變數,我只是硬編碼到展示的數字。

+1

爲什麼要使用負數來執行此操作? –

+0

我們這裏有什麼是XY的失敗。 –

回答

3

-7可能是一個32位的負數 - 也就是說,0xfffffff9。如果您只想使用9位,則需要將其屏蔽:

num = (num << 9) | (-7 & 0x1ff)