You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中两个float相加的结果是float、double还是编译器定义行为?

C语言两个float类型相加的结果类型说明

结论

两个float类型的值相加的运算结果明确为float类型,不属于编译器定义行为,9.0f + 8.0f的结果就是float类型。

C语言规范依据

引自C11标准第6.3.1.8节「通常算术转换」:
首先,若任一操作数对应的实数类型为long double,则另一操作数无需变更类型域,直接转换为实数类型为long double的类型。
否则,若任一操作数对应的实数类型为double,则另一操作数转换为double类型。
否则,若任一操作数对应的实数类型为float,则另一操作数转换为float类型。

两个float操作数符合上述第三条规则,无需做类型提升,运算结果保持float类型。

验证示例

可以通过C11新增的_Generic泛型选择语法直接验证类型:

#include <stdio.h>
int main() {
    // 输出9.0f + 8.0f对应的类型名称
    puts(_Generic(9.0f + 8.0f,
        float: "float",
        double: "double",
        long double: "long double"
    ));
    return 0;
}

上述代码运行后输出float,可直观证实结果类型。

内容的提问来源于stack exchange,提问作者B. Nadolson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:45:03