C 为什么十六进制浮点需要指定指数?
我现在正在学习编程语言(BNF、扫描器等),C中的十六进制浮点常量需要指数,这似乎很奇怪 根据C99标准 §6.4.4.2浮动常数C 为什么十六进制浮点需要指定指数?,c,standards,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-s
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标准规定十进制浮点数的指数是可选的,而十六进制浮点数的指数是必需的?这在第6.4.4.2节:
C99的一个新特性是:C99添加了十六进制表示法,因为它比
清楚地表达了浮动常数的意义。这个
二进制指数部分是必需的,而不是可选的
十进制表示法,以避免因使用f
后缀而产生歧义
误认为是十六进制数字
例如,1.0f
是类型为float
的十进制浮点常量,但0x1.0f
将不明确,必须写入0x1.0p0f
出于同样的原因,指数由p
而不是e
引入,因为e
是一个有效的十六进制数字