簡體   English   中英

Java:4 字節到 32 位整數

[英]Java: 4 bytes to 32 bit integer

我試圖理解以下代碼:

int omgezetteTijd =
((0xFF & rekenOmNaarTijdArray[0]) << 24) | ((0xFF & rekenOmNaarTijdArray[1]) << 16) |((0xFF & rekenOmNaarTijdArray[2]) << 8) | (0xFF & rekenOmNaarTijdArray[3]);

我不明白的是為什么你用 OxFF 與它進行 AND 運算,你將一個 8 位值與 8 位像這樣 (11111111),所以這應該給你相同的結果。

但是,當我不將它與 OxFF 進行 AND 運算時,我會得到負值嗎? 無法弄清楚為什么會這樣?

當您一個帶有 int 的字節時,該字節將被提升為一個 int。 默認情況下,這是通過符號擴展完成的。 換句話說:

                           //                      sign bit
                           //                         v
byte b = -1;               //                         11111111 = -1
int i = (int) b;           // 11111111111111111111111111111111 = -1
                           // \______________________/
                           //      sign extension

通過執行& 0xFF可以防止這種情況。 IE

                           //                      sign bit
                           //                         v
byte b = -1;               //                         11111111 = -1
int i = (int) (0xFF & b);  // 00000000000000000000000011111111 = 255
                           // \______________________/
                           //     no sign extension

0xFF 作為一個byte代表數字-1。 當它轉換為int ,它仍然是 -1,但由於符號擴展,它的位表示為0xFFFFFFFF & 0xFF避免了這種情況,在轉換為 int 時將字節視為無符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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