Базовый формат IEEE с плавающей запятой основан на четырехбайтовом
значение, и это проще для анализа, если вы отображаете его как таковой. В этом
в случае, верхний бит - показатель степени, следующие 8 - показатель степени (в избытке
127), а остальное мантисса. Самый простой способ объяснить это
возможно, чтобы показать код C ++, который будет обращаться к отдельным полям:
double d;
// ...
uint32_t const* p = reinterpret_cast<uint32_t const*>( &d );
bool isNegative = (*p & 0x80000000) != 0;
int exp = ((*p & 0x78000000) >> 23) - 127;
int mantissa = (*p & 0x07FFFFFF) | 0x08000000 ;
Мантисса должна иметь неявное десятичное место чуть выше 24
биты (но я не знаю, как представить это как целое число: -)).
Если все, что у вас есть, это последовательность байтов, вы должны собрать их,
в соответствии с порядком байтов, а затем примените вышеуказанное.
Отредактировано: значения констант были исправлены, после того как Руди Велтуис указал на мою ошибку.