0

为了提供一些背景知识,我正在用 C 为 Java 8 编写 JVM,并且我正在尝试打印位于常量池中的 Double 值。

我有两个变量 uint32_t 代表双精度的高值和低值。我正在尝试打印这个双精度,但我无法弄清楚我的代码有什么问题。

我试过打印所有值来检查。

uint64_t high_arg, low_arg, double_value;

high_arg = cp[cpIndex-1].info.Double.high_bytes; // value is = 0x0000000040000000
low_arg = cp[cpIndex-1].info.Double.low_bytes; // value is = 0x0000000000000000
double_value = (high_arg << 32) | low_arg; // value is = 0x4000000000000000
printf("%f\n", (double)double_value);

它打印double:4.61169e+18但应该返回2

我错过了什么?

4

1 回答 1

1

正如@JonathanLeffler 明智地指出的那样,解决方案是将表示双精度的整数转换为双指针,然后打印其内容。

printf("%f", *(double *)&double_value);
于 2019-05-21T17:46:12.187 回答