Чтобы дать некоторое представление, я кодирую JVM для Java 8 в C и пытаюсь напечатать значение 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
Чего мне не хватает?