2011-01-28 79 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