gpt4 book ai didi

Java - 将整数复制到长

转载 作者:行者123 更新时间:2023-11-29 06:49:31 25 4
gpt4 key购买 nike

我有一个外部系统输出 2 个代表 64 位无符号整数的无符号整数。 Java 选择这些并将它们转换为有符号整数。我在 Java 中称它们为 lower 和 upper。我想把它放回 64 位 int。我知道我必须使用 signed int,这没问题。

我开始将它们都转换为 long,将上面的 long 移动 32 位,然后尝试将它们相加,但结果并不顺利,因为转换移动了整数的符号位。所以我开始胡乱添加 2^31 和其他乱七八糟的东西。我怎样才能干净地做到这一点?

这里是一个例子,为简单起见,使用 2 x 8 位数字到 16 位

更高 = 00000000 更低 = 11111111
期望的结果
0000000011111111
结果我得到
1000000001111111

编辑:这是我认为工作正常的代码(我还没有完全测试过)但我希望有一些更干净的东西。

private static long combineCounters(int lower, int upper) {
long lower2 = (long)lower;
if(lower2 < 0) lower2 += (2L<<31);
long upper2 = (long)upper;
if(upper2 < 0) upper2 += (2L<<31);
long result = lower2 | (upper2<<32);
return result;
}

最佳答案

对于您的情况,首先,您应该将整数值正确地存储到 long 中。为此,您可以将您的值与 0xFFFFFFFFFL(前 32 位为 1 的 long)相乘。

这是一个有效的例子:

int upperInt = ...
int lowerInt = ...
long hi = upperInt & 0xFFFFFFFFL;
long lo = lowerInt & 0xFFFFFFFFL;
long c = (hi << 32) | lo;
System.out.println(String.format("0x%X", c));

关于Java - 将整数复制到长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53552193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com