【发布时间】:2016-07-16 15:23:54
【问题描述】:
在 C 语言中,如果我希望浮点字面量 x 为十六进制形式并具有指数值,则将其表示为:
float x = 0X2aE+10;
其中 0x 用于表示它是十六进制,2a 表示十六进制字符,E+10 表示十的十次方。 但是,编译器会知道不是 2aE 代表十六进制数字(因为十六进制使用 a 到 e 表示 10-15)并且 +10 只是在数字上加十?如果没有,解决办法是什么?
【问题讨论】:
-
0X2aE+10是unsigned计算,在将值686(十进制)分配给float之前进行评估。 -
codepad.org/DaR86CWu 给我一个错误
-
clang和gcc都返回error: invalid suffix '+10' on integer constant -
@WeatherVane: 恐怕你弄错了:
0X2aE+10是一个有效的预处理器令牌,它不能转换成一个有效的 C 令牌,它不应该被解析为一个表达式。 -
@WeatherVane:有趣!与 MSVC 标准的又一区别。无论它是否支持十六进制浮点数,它都应该将
0X2aE+10解析为预处理数字(pp-number),该数字在阶段 7 中被转换为整数常量或浮点常量。不应像您的测试表明的那样重新解释或解析它。
标签: c