簡體   English   中英

Java,將兩個整數組合成長結果負數

[英]Java, combining two integers to long results negative number

我正在嘗試將兩個整數組合成Java中的long。 這是我正在使用的代碼:

Long combinedValue = (long) a << 32 | b;

a = 0x03b = 0x1B56 ED23 ,我能夠獲得期望值(long combinedValue = 13343583523 )。

但是,當我的a = 0x00b = 0xA2BF E1C7 ,我得到的是負值-1567628857而不是2730484167 誰能解釋為什么將整數0移位32位會導致前32位變為0xFFFF FFFF

謝謝

b為負。 那就是常量的意思。 您可能想要的((long) a << 32) | (b & 0xFFFFFFFFL) ((long) a << 32) | (b & 0xFFFFFFFFL)

當對b (long) a << 32b ,如果b是一個int則它將提升為long因為必須在兩個相同類型的值之間進行運算。 這稱為擴大轉換。

當從intlong轉換發生時, b將被符號擴展,這意味着如果設置了最高位,則它將被復制到64位long值的高32位中。 這就是導致高32位為0xffffffff

暫無
暫無

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

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