0x0.3p10
表示什么价值?
上面的陈述中p
的含义是什么?
答案 0 :(得分:48)
0x0.3p10
是C99中引入的十六进制浮点文字的示例。 p
将基数与指数分开。
0x0.3
位称为有效位数部分(整数带有可选分数),指数是2的幂,用于缩放。
该特定值以十六进制计算为0.3
,或3 * 16-1
(3/16
)乘以210
(1024
),得出{{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的幂时,结果被正确舍入。