我正在尝试在 Java 中将两个整数组合成一个长整型。这是我正在使用的代码:
Long combinedValue = (long) a << 32 | b;
当 a = 0x03
和 b = 0x1B56 ED23
时,我能够得到预期值(combinedValue = 13343583523
长)。
但是,当我的 a = 0x00
和 b = 0xA2BF E1C7
时,我得到一个负值 -1567628857
,而不是 2730484167
。谁能解释为什么将整数 0 移动 32 位会导致前 32 位变为 0xFFFF FFFF
?
谢谢
最佳答案
b
也是负的。这就是常量的意思。您可能想要的是((long) a << 32) | (b & 0xFFFFFFFFL)
.
关于Java,将两个整数组合成长结果负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37425636/