2014-06-18 117 views
5

我正在學習編程語言(BNFs,掃描儀等),看起來很奇怪,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標準使指數對十進制浮點是可選的,對十六進制浮點是必需的?

回答

7

這是包括在C99 Rationale,部分6.4.4.2:

C99的一個新特點: C99增加了十六進制的,因爲它更 明確表示浮點常量的意義。所述 二進制指數部分是必需的,而不是任選的,因爲它是 十進制,以避免歧義從f後綴是 誤認爲是十六進制數字所得。

例如,1.0f是一個十進制浮點常量float類型,但0x1.0f將是模糊的,並且必須被寫爲0x1.0p0f

出於同樣的原因,指數由p而不是e引入,因爲e是有效的十六進制數字。