为什么十六进制浮点需要具有指定的指数?

cou*_*que 5 c standards

我现在正在学习编程语言(BNF,扫描仪等),C中的十六进制浮点常数需要指数似乎很奇怪.

从C99标准来看,

§6.4.4.2浮动常数

hexadecimal-floating-constant:  
    hexadecimal-prefix hexadecimal-fractional-constant  
        binary-exponent-part floating-suffix[opt]  
    hexadecimal-prefix hexadecimal-digit-sequence  
        binary-exponent-part floating-suffix[opt]
Run Code Online (Sandbox Code Playgroud)

编写一个扫描器可以很容易地解析带有可选指数的十六进制浮点常量.为什么C标准使十进制浮点的指数可选,十六进制浮点需要?

Kei*_*son 7

这在C99基本原理第6.4.4.2节中有所介绍:

C99的一个新特性: C99增加了十六进制表示法,因为它更清楚地表达了浮点常量的重要性.二进制指数部分是必需的,而不是任选的,因为它是用于分十进制表示法,以避免从一个所得歧义f后缀被误认为一个十六进制数字.

例如,1.0f是类型的十进制浮点常量float,但是0x1.0f不明确,必须写为0x1.0p0f.

出于同样的原因,引入的是指数p而不是e因为e是有效的十六进制数字.