无法将uint64_t正确转换为double。我想念什么?

时间:2019-05-21 17:19:35

标签: c type-conversion stdint

为了提供一些背景知识,我正在用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

我想念什么?

1 个答案:

答案 0 :(得分:1)

@JonathanLeffler明智地指出,解决方案是将表示double的整数转换为double指针,并打印其内容。

printf("%f", *(double *)&double_value);