[英]Java, combining two integers to long results negative number
我正在嘗試將兩個整數組合成Java中的long。 這是我正在使用的代碼:
Long combinedValue = (long) a << 32 | b;
當a = 0x03
和b = 0x1B56 ED23
,我能夠獲得期望值(long combinedValue = 13343583523
)。
但是,當我的a = 0x00
和b = 0xA2BF E1C7
,我得到的是負值-1567628857
而不是2730484167
。 誰能解釋為什么將整數0移位32位會導致前32位變為0xFFFF FFFF
?
謝謝
b
為負。 那就是常量的意思。 您可能想要的是((long) a << 32) | (b & 0xFFFFFFFFL)
((long) a << 32) | (b & 0xFFFFFFFFL)
。
當對b
(long) a << 32
或b
,如果b
是一個int
則它將提升為long
因為必須在兩個相同類型的值之間進行運算。 這稱為擴大轉換。
當從int
到long
轉換發生時, b
將被符號擴展,這意味着如果設置了最高位,則它將被復制到64位long值的高32位中。 這就是導致高32位為0xffffffff
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.