2017-08-13 62 views
1

我看了this關於轉移的話題。我想,如果我有兩個字節:爲什麼只用移位來轉換兩個字節是無稽之談?

byte hi = //... 
byte low = //... 

,爲什麼我就不能做到這一點

short s = (short)((hi << 8) | low) 

爲什麼是不正確的?我認爲我們的8位左移最重要,並保留最低有效字節。然後只是按位或他們。

+0

你應該使用字節緩衝區爲喜歡:ByteBuffer.wrap(valBytes).order(的ByteOrder.LITTLE_ENDIAN).getShort(); –

+0

@FadySaad我知道'ByteBuffer'。我有興趣瞭解位移操作......只是:) –

回答

2

這給出了錯誤的結果,因爲字節被簽名並擴展爲int來執行計算。因此,採取例如

hi = (byte)0x01; 
low = (byte)0x80; 

然後你算算:

0x00000100 | 0xffffff80 -> 0xffffff80 

這是不理想的結果。

你可以寫這樣的而不是:

short s = (short)((hi << 8) | (low & 0xff)) 
相關問題