pax*_*blo 49
0x0.3p10是C99中引入的十六进制浮点文字的示例.将p基数与指数分开.
该0x0.3位称为有效位数部分(整数具有可选分数),指数是2的幂,通过它可以缩放.
该特定值0.3以十六进制计算,或()乘以(),得到或.3 * 16-13/1621010243 * 1024 / 16192
以下程序证实了这一点:
#include <stdio.h>
int main (void) {
double d = 0x0.3p10;
printf ("%.f\n", d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第6.4.4.2C99的有所有细节:
浮点常量具有有效位部分,后面可以跟一个指数部分和一个指定其类型的后缀.有效数部分的分量可以包括表示整数部分的数字序列,后面是句点(.),后面是表示分数部分的数字序列.
指数部分的分量是e,E,p或P,后跟由任选有符号的数字序列组成的指数.要么必须存在整数部分或分数部分; 对于十进制浮点常量,必须存在句点或指数部分.
有效数部分被解释为(十进制或十六进制)有理数; 指数部分中的数字序列被解释为十进制整数.对于十进制浮点常数,指数表示有效位部分要缩放的10的幂.对于十六进制浮点常量,指数表示有效位部分要缩放的2的幂.
对于十进制浮点常量,以及当FLT_RADIX不是2的幂时的十六进制浮点常量,结果是最接近的可表示值,或者与实现定义中选择的最接近的可表示值紧邻的更大或更小的可表示值方式.对于十六进制浮点常量,当FLT_RADIX是2的幂时,结果被正确舍入.