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 / 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,后跟一个由可选带符号数字序列组成的指数。必须存在整数部分或小数部分;对于十进制浮点常量,必须存在句点或指数部分。

有效数字部分被解释为(十进制或十六进制)有理数;指数部分的数字序列被解释为十进制整数。对于十进制浮点常量,指数表示 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中的十六进制浮点常量的主要内容,如果未能解决你的问题,请参考以下文章

C 常量

C 常量

C 常量

C 常量

软件设计师_C语言基础

C语言啥是语法啊