簡體   English   中英

將長度為3的字節數組轉換為int

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM