我有存储为字节的无符号 32 位、64 位原语。我需要在 Java 中使用它们。所以我想把它们从字节重新组合在一起。首先,我正在玩随机字节以确保所有内容都正确计算。但是我遇到了一些问题:
// input: array of 4 bytes (unsigned int 0 to 4,294,967,295)
// output: double 0.0 to 1.0 (0 -> 0.0, 2,147,483,647 ~> 0.5, 4,294,967,295 -> 1.0)
byte[] bytes = new byte[100];
(new Random()).nextBytes(bytes); // randomize bytes
long a = (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
double b = 1.0 * (a & 0xffffffffL) / 0xffffffffL;
System.out.println(bytes[3] + "," + bytes[2] + "," + bytes[1] + "," + bytes[0]);
System.out.println(a);
System.out.println(b);
输出 b 大部分时间接近 1.0 和接近最大无符号整数。我究竟做错了什么 ?我如何获得想要的行为?以及如何使用 8 个字节为 QWORD 做同样的事情(正确计算)?