C中的十六进制浮点常量
Posted
技术标签:
【中文标题】C中的十六进制浮点常量【英文标题】:hexadecimal floating constant in C 【发布时间】:2011-06-17 02:01:50 【问题描述】:0x0.3p10
代表什么值?
上面语句中的p
是什么意思?
【问题讨论】:
【参考方案1】:0x0.3p10
是在 C99 中引入的十六进制浮点文字的示例。 p
将基数与指数分开。
0x0.3
位称为有效数字部分(整数部分带有可选小数),指数是 2 的幂。
该特定值计算为十六进制的0.3
,或3 * 16<sup>-1</sup>
(3/16
) 乘以2<sup>10</sup>
(1024
),得到3 * 1024 / 16
或192
。
以下程序证实了这一点:
#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,后跟一个由可选带符号数字序列组成的指数。必须存在整数部分或小数部分;对于十进制浮点常量,必须存在句点或指数部分。
有效数字部分被解释为(十进制或十六进制)有理数;指数部分的数字序列被解释为十进制整数。对于十进制浮点常量,指数表示 10 的幂,有效数部分将按其缩放。对于 16 进制浮点常量,指数表示 2 的幂,有效数部分将按其缩放。
对于十进制浮点常量,以及当 FLT_RADIX 不是 2 的幂时的十六进制浮点常量,结果要么是最接近的可表示值,要么是紧邻最接近的可表示值的较大或较小的可表示值,在实现定义的方式。对于 FLT_RADIX 为 2 的幂时的十六进制浮点常量,结果被正确舍入。
【讨论】:
嗨,那它代表什么十进制值?p
是否代表一些英文单词?谢谢。
感谢您的回答。这在 C++ 中可用吗?
@Benoit,我不这么认为 - C++0x 2.14.4 详细说明了浮动文字,其中没有提到 p
变体。
@Benoit added in C++17
@rampion 感谢您的通知!总是令人印象深刻。以上是关于C中的十六进制浮点常量的主要内容,如果未能解决你的问题,请参考以下文章