Вы путаете логическое значение и внутреннее представление. Ваши назначения устанавливают значение , которое после этого составляет 0x46C35000, то есть 1187205120.
Чтобы установить внутреннее представление числа с плавающей запятой, необходимо сделать несколько предположений о том, как числа с плавающей запятой представляются в памяти. Предположения на веб-сайте, который вы используете (IEEE 754, 32-разрядная версия), справедливы для компьютеров общего назначения.
Чтобы изменить внутреннее представление, используйте memcpy
, чтобы скопировать необработанные байты в число с плавающей точкой:
// Ensure our assumptions are correct:
#if !defined(__STDC_IEC_559__) && !defined(__GCC_IEC_559)
# error Floating points might not be in IEEE 754/IEC 559 format!
#endif
_Static_assert(sizeof(float) == sizeof(uint32_t), "Floats are not 32 bit numbers");
float f;
uint32_t rep = 0x46C35000;
memcpy(&f, &rep, sizeof f);
printf("%f\n", f);
Вывод: 25000.000000
.
(для этого требуется заголовок stdint.h
для uint32_t
и string.h
для memcpy
.)