ISO C99 supports floating-point numbers written not only in the usual decimal notation, such as `1.55e1`

, but also numbers such as `0x1.fp3`

written in hexadecimal format. As a GNU extension, GCC supports this in C90 mode (except in some cases when strictly conforming) and in C++. In that format the ‘`0x`’ hex introducer and the ‘`p`’ or ‘`P`’ exponent field are mandatory. The exponent is a decimal number that indicates the power of 2 by which the significant part is multiplied. Thus ‘`0x1.f`’ is 1 15/16, ‘`p3`’ multiplies it by 8, and the value of `0x1.fp3`

is the same as `1.55e1`

.

Unlike for floating-point numbers in the decimal notation the exponent is always required in the hexadecimal notation. Otherwise the compiler would not be able to resolve the ambiguity of, e.g., `0x1.f`

. This could mean `1.0f`

or `1.9375`

since ‘`f`’ is also the extension for floating-point constants of type `float`

.

© Free Software Foundation

Licensed under the GNU Free Documentation License, Version 1.3.

https://gcc.gnu.org/onlinedocs/gcc-7.3.0/gcc/Hex-Floats.html