Вы можете использовать показатель степени 0
:
float val = 0xDE.488641p0;
Что в более нормальном виде означает DE.488641 × 2 0 (в базе 16, конечно). Ваше предположение было близко - показатель степени равен двоичному , а не показателю шестнадцатеричного значения. Вы также используете отрицательный показатель, когда хотите получить положительный показатель. Исправляя свой второй пример, вы можете использовать:
float val = 0x0.DE488631p8;
Что в обычной математической записи означает 0.DE488631 × 2 8 , или эквивалентно с шестнадцатеричным основанием для показателя степени, 0.DE488631 × 16 2 .
Я думаю, что использовать показатель степени 0
гораздо проще для понимания, если у вас нет причин использовать форму из второго примера.