2011-01-28 25 views

回答

46

0x0.3p10是在C99中引入的十六進制浮點字面值的示例。 p將基數與指數分開。

0x0.3位被稱爲有效數字部分(整體帶有可選小數部分),指數是它被縮放的2的冪數。

該特定值被作爲在0.3十六進制或3 * 16-13/16)乘以2101024),其給出3 * 1024/16192計算。

下面的程序證實了這一點:

#include <stdio.h> 
int main (void) { 
    double d = 0x0.3p10; 
    printf ("%.f\n", d); 
    return 0; 
} 

部分C99的6.4.4.2具有所有的細節:

一個浮動常數具有一個有效數部分可以跟一個指數部分和一個後綴它指定了它的類型。有效數字部分的組成部分可以包括一個代表整數部分的數字序列,後跟一個句點(。),後面跟着一個代表小數部分的數字序列。

指數部分的組成部分是一個e,E,p或P,後跟一個由任意有符號數字序列組成的指數。整數部分或小數部分都必須存在;對於十進制浮點常量,週期或指數部分必須存在。

有效部分被解釋爲(十進制或十六進制)有理數;指數部分的數字序列被解釋爲十進制整數。對於十進制浮點常量,指數表示有效位數部分將被縮放的功率。對於十六進制浮點常數,指數表示有效位部分將被縮放的2的冪。

對於十進制浮點常量以及FLT_RADIX不是2的冪時的十六進制浮點常量,結果可以是最接近的可表示值,也可以是緊鄰最接近的可表示值的較大或較小的可表示值,在一種實現定義的方式。對於FLT_RADIX爲2的冪時的十六進制浮點常量,結果正確舍入。

+0

嗨,那它代表什麼十進制值? `p`代表一些英語單詞嗎?謝謝。 – 2011-01-28 07:31:46