6.15 Шестнадцатеричные числа с плавающей запятой
ISO C99 и ISO C++17 поддерживают числа с плавающей запятой, записываемые не только в обычной десятичной форме, например 1.55e1, но и в шестнадцатеричной форме, например 0x1.fp3. В качестве расширения GNU, GCC поддерживает это в режиме C90 (за исключением некоторых случаев строгого соответствия) и в режимах C++98, C++11 и C++14. В этой форме обязательны шестнадцатеричный префикс ‘0x’ и поле экспоненты ‘p’ или ‘P’. Экспонента — это десятичное число, указывающее на степень двойки, на которую умножается значащая часть. Таким образом, ‘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-13.3.0/gcc/Hex-Floats.html