![](/img/trans.png)
[英]How to get a signed 32 bit integer from hex bytes without being 2's complement applied to it in java
[英]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.