6.12.16 Шестнадцатеричные числа с плавающей точкой
В ISO C99 и ISO C++17 поддерживаются числа с плавающей точкой, записанные не только в обычной десятичной нотации, например 1.55e1, но и числа, такие как 0x1.fp3, записанные в шестнадцатеричном формате. В качестве расширения GNU GCC поддерживает такую запись в режиме C90 (за исключением некоторых случаев строгого соответствия стандарту), а также в режимах C++98, C++11 и C++14. В этом формате обязательны шестнадцатеричный префикс ‘0x’ и поле экспоненты ‘p’ или ‘P’. Экспонента — это десятичное число, указывающее степень числа 2, на которую умножается значащая часть. Таким образом, ‘0x1.f’ — это 1 15/16, ‘p3’ умножает это число на 8, а значение 0x1.fp3 совпадает со значением 1.55e1.
В отличие от чисел с плавающей точкой в десятичной нотации, в шестнадцатеричной нотации экспонента всегда обязательна. Иначе компилятор не смог бы устранить неоднозначность, например, в 0x1.f. Это может означать 1.0f или 1.9375, поскольку ‘f’ также является суффиксом констант с плавающей точкой типа float.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Hex-Floats.html