Java,将两个整数组合成长结果负数

标签 java long-integer bit

我正在尝试在 Java 中将两个整数组合成一个长整型。这是我正在使用的代码:

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

a = 0x03b = 0x1B56 ED23 时,我能够得到预期值(combinedValue = 13343583523 长)。

但是,当我的 a = 0x00b = 0xA2BF E1C7 时,我得到一个负值 -1567628857,而不是 2730484167。谁能解释为什么将整数 0 移动 32 位会导致前 32 位变为 0xFFFF FFFF

谢谢

最佳答案

b也是负的。这就是常量的意思。您可能想要的是((long) a << 32) | (b & 0xFFFFFFFFL) .

关于Java,将两个整数组合成长结果负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37425636/

相关文章:

java - 如何在Java中加载大图像

Java Collections.shuffle() 奇怪的行为

c - 当我在 C 中将 long int 分配给 int 时会发生什么?

c - 如何返回中间位?

java - 在java中分割一个字符串并用另一个字符串映射到值

java - Spring Webflow对两种类型的用户进行身份验证

c# - SERVICE STACK 中的长轮询

c - C语言中如何反转位运算

c++ - 使用 ofstream 将 4 位写入二进制文件

Java 网络模拟器入门