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