2008-11-03 21 views
1

我有32位整數存儲的有符號數(2s補碼),我想從它們中提取16位字段。如果我從32位有符號數中提取低16位,那麼只要原始(32位)數適合於16位,結果是正確的?從有符號數中提取位字段

對於正數而言,它非常正確,對於負數也是如此。但是它能被證明嗎?

在此先感謝

回答

3

是的,在二進制補碼中,符號位向左延伸「一路」。當您將已簽名的short賦給已簽名的int時,數字爲"sign extended",並且具有相同的值。

例子:Nibble(-2) = 1110 => Byte(-2) = 1111_1110

顯然,這真太,如果捕獲至少一個符號位,則數的值保持不變相反。

0

從我的(第二個)你的問題的閱讀,它似乎並不像你需要「提取」任何位,而是轉換整數?

I.e.做這樣的事情:

int negative = -4711; 
short x = (short) negative; 

在這種情況下,編譯器將確保儘可能多地將原始數字的精度轉換爲賦值。即使底層硬件不使用2:s補碼,情況也是如此。如果是這樣,那麼這可能只是一個截斷,正如Motti解釋的那樣。