【发布时间】:2018-03-23 15:27:38
【问题描述】:
我有这样的事情:
int[0] = 4123;
int[1] = 2571;
我想将它们结合起来并在 Java 中创建一个 long 值。 这是我的尝试:
int[] r = { 4123, 2571 };
long result = ( (r[1] & 0xFFFF) << 16 | (rs[0] & 0xFFFF) );
System.out.prinln(result);
输出应该是:10111627,但我得到 168497179。可能我在转换中错过了一些东西,但不知道是什么......
编辑
这是如何将值放入 32 位寄存器的示例。
【问题讨论】:
-
10111627 无论我怎么看都不是由 4123 和 2571 组成的。在十六进制中,小部分是 0x101b 和 0x0a0b,我无法以任何合理的方式将其变成 0x009a4a8b。你怎么知道输出应该是什么?这部分一开始就正确吗?
-
您的代码是正确的。你的测试错了。
-
请看我更新的帖子。有图像显示该值如何存储到 32 位寄存器中,以及我如何得到结果应该是 10111627
-
你确定你应该得到 10111627 吗? Wolfram 不这么认为:wolframalpha.com/input/?i=1010000010110001000000011011
-
这不是基本转换的工作方式,结果确实是 0x0a0b101e aka 168497179,但您将其重新解释为字节数组。