C中的十六进制浮点常数

时间:2011-01-28 07:21:02

标签: c constants hex

0x0.3p10表示什么价值?

上面的陈述中p的含义是什么?

1 个答案:

答案 0 :(得分:48)

0x0.3p10是C99中引入的十六进制浮点文字的示例。 p将基数与指数分开。

0x0.3位称为有效位数部分(整数带有可选分数),指数是2的幂,用于缩放。

该特定值以十六进制计算为0.3,或3 * 16-13/16)乘以2101024),得出{{1 }或3 * 1024 / 16

以下程序证实了这一点:

192

C99的#include <stdio.h> int main (void) { double d = 0x0.3p10; printf ("%.f\n", d); return 0; } 部分包含所有细节:

  

浮点常量具有有效位部分,后面可以跟一个指数部分和一个指定其类型的后缀。有效数部分的分量可以包括表示整数部分的数字序列,后跟一个句点(。),然后是   表示分数部分的数字序列。

     

指数部分的分量是e,E,p或P,后跟由可选带符号的数字序列组成的指数。要么必须存在整数部分或分数部分;对于十进制浮点常量,必须存在句点或指数部分。

     

有效数部分被解释为(十进制或十六进制)有理数;指数部分中的数字序列被解释为十进制整数。对于十进制浮点常数,指数表示有效位部分要缩放的10的幂。对于十六进制浮点常量,指数表示有效位部分将被缩放的2的幂。

     

对于十进制浮点常量,以及当FLT_RADIX不是2的幂时,对于十六进制浮点常量,结果是最接近的可表示值,或紧邻最近可表示值的较大或较小可表示值,在实现定义的方式。对于十六进制浮点常量,当FLT_RADIX是2的幂时,结果被正确舍入。