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

时间:2014-06-18 14:50:29

标签: 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]

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

1 个答案:

答案 0 :(得分:7)

C99 Rationale第6.4.4.2节

中介绍了这一点
  

C99的新功能: C99添加了十六进制表示法,因为它更多   清楚地表达了浮动常数的重要性。该   binary-exponent部分是必需的,而不是可选的   十进制表示法,以避免由 f 后缀导致的歧义   被误认为是十六进制数字。

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

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