![](/img/trans.png)
[英]Conflicting answers on converting int to byte array of length 2 in java
[英]Converting byte array of length 3 into an int
我有一個長度為3的字節數組,表示
十進制
二進制數。 我的問題:
為什么這是正確的:
(a) int x = (array[0] & 0xff) << 16 | (array[1] & 0xff) << 8 | (array[2] & 0xff);
int x = (array[0] & 0xff) << 16 | (array[1] & 0xff) << 8 | (array[2] & 0xff);
但這不是?
(b) int x = array[0] << 16 | array[1] << 8 | array[2];
int x = array[0] << 16 | array[1] << 8 | array[2];
假設array [0]是01010101
。 這不是發生了什么?
array[0] & 0xff = 01010101 & 11111111 = 01010101 = array[0]
為什么選項b)錯了?
考慮當array[0]
的最高位為1時會發生什么。
例如:
array[0] = (byte)0xff;
System.out.println (array[0] << 16);
System.out.println ((array[0] & 0xff) << 16);
輸出:
-65536
16711680
為了左移運算符, array[0]
被轉換為int
。 如果它具有作為byte
的負值,則它將具有作為int
的負值,並且在左移之后將具有負值。
當您使用0xff
執行按位AND時,確保結果為正。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.