十六进制浮点文字中的十六进制“E/e”与指数形式的“E/e”如何区分?

2024-03-29

在 C 中,如果我想要一个浮点文字 x 为十六进制形式并具有指数值,它将表示为:

float x = 0X2aE+10;

其中0x用于表示它是十六进制的,2a用于表示十六进制字符,E+10用于表示十的10次方的数字。 然而,编译器是否知道它不是 2aE 代表十六进制数字(因为十六进制使用 a 到 e 表示 10-15),而 +10 只是在数字上加 10?如果没有,解决办法是什么?


0X2aE+10是一个有效的预处理器标记,它不会转换为有效的 C 标记,因此会出现编译错误。 C99 十六进制浮点数使用P or p作为指数标记,如:

float x = 0X2aP+10;

哪个有价值0x2a * 1024 -> 43008.

对于那些不了解预处理数字的人:

6.4.8 预处理数字

Syntax

pp-number:
      digit
      . digit
      pp-number digit
      pp-number identifier-nondigit
      pp-number e sign
      pp-number E sign
      pp-number p sign
      pp-number P sign
      pp-number .

描述

预处理编号以数字开头(可选地前面带有句点 (.)),后面可以是有效标识符字符和字符序列e+, e-, E+, E-, p+, p-, P+, or P-.

预处理数字标记在词法上包括所有浮点和整数常量标记。

语义学

预处理数字没有类型或值;它在成功转换(作为转换阶段 7 的一部分)到浮点常量标记或整数常量标记后获取两者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十六进制浮点文字中的十六进制“E/e”与指数形式的“E/e”如何区分? 的相关文章

随机推荐