我有這行代碼爪哇位運算
int b1 = 0xffff & (content[12]<<8 | 0xff & content[11]);
我在小端排序的ByteArray(內容[])和需要重新創建一個2字節值。此代碼工作得很好,但在測試之前我曾經有過這樣寫
int b1 = 0xffff & (content[12]<<8 | content[11]);
,結果是不正確的。我的問題是爲什麼在這種情況下需要0xff?
我有這行代碼爪哇位運算
int b1 = 0xffff & (content[12]<<8 | 0xff & content[11]);
我在小端排序的ByteArray(內容[])和需要重新創建一個2字節值。此代碼工作得很好,但在測試之前我曾經有過這樣寫
int b1 = 0xffff & (content[12]<<8 | content[11]);
,結果是不正確的。我的問題是爲什麼在這種情況下需要0xff?
的0xff
是必要的,因爲兩個因素的匯合:
int
(或long
,如果需要的話)。其結果是,如果content[11]
高階位被設置,它將被符號擴展到負int
值。您需要&
這與0xff
返回到(正)字節值。否則當你|
它的結果爲content[12]<<8
時,高位字節將全部爲1。
Thx回覆!我不會猜測內容[11]會被轉換爲高位設置的int。我認爲當我將兩個值與OR結合時,他們會在比特級別上使用。乾杯 – John 2013-04-04 18:34:03
@John如果你對這個答案感到滿意(你似乎是這樣),請[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-工作)。 – 2013-04-05 16:30:55
因爲字節被解釋爲帶符號整數,這意味着,例如,(字節)0x80得到(int)0xffffff80。這稱爲符號擴展。 – Ingo 2013-04-04 18:26:33