1
我看了this關於轉移的話題。我想,如果我有兩個字節:爲什麼只用移位來轉換兩個字節是無稽之談?
byte hi = //...
byte low = //...
,爲什麼我就不能做到這一點
short s = (short)((hi << 8) | low)
爲什麼是不正確的?我認爲我們的8位左移最重要,並保留最低有效字節。然後只是按位或他們。
我看了this關於轉移的話題。我想,如果我有兩個字節:爲什麼只用移位來轉換兩個字節是無稽之談?
byte hi = //...
byte low = //...
,爲什麼我就不能做到這一點
short s = (short)((hi << 8) | low)
爲什麼是不正確的?我認爲我們的8位左移最重要,並保留最低有效字節。然後只是按位或他們。
這給出了錯誤的結果,因爲字節被簽名並擴展爲int來執行計算。因此,採取例如
hi = (byte)0x01;
low = (byte)0x80;
然後你算算:
0x00000100 | 0xffffff80 -> 0xffffff80
這是不理想的結果。
你可以寫這樣的而不是:
short s = (short)((hi << 8) | (low & 0xff))
你應該使用字節緩衝區爲喜歡:ByteBuffer.wrap(valBytes).order(的ByteOrder.LITTLE_ENDIAN).getShort(); –
@FadySaad我知道'ByteBuffer'。我有興趣瞭解位移操作......只是:) –