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

为何C语言中整数与浮点数相加会输出奇怪结果?

问题原因解析

首先看你代码里的计算逻辑:15 + 9.0 是整数与浮点数相加,C语言会自动把整数15转换为double类型,相加后得到的结果是24.0,类型为double。

问题核心出在printf的格式符使用上:

  • %d是专门用来输出int类型数据的格式符,但你传给printf的是一个double类型的值。
  • printf属于可变参数函数,它不会自动校验传入参数的类型是否和格式符匹配,只会严格按照格式符指定的类型,从参数栈中读取对应大小的字节来解析。

double类型在内存中通常占8字节,而int通常占4字节。当你用%d去解析24.0的二进制存储时,它只会读取其中的4个字节,并把这4个字节当成int的补码来解释,这就导致了完全不符合预期的奇怪数值(也就是你看到的-1866308488)。

如果要正确输出这个结果,你需要用适合浮点数的格式符,比如%f或者%lf:

#include <stdio.h>
int main() {
    printf("%f", 15 + 9.0);
    return 0;
}

这段代码会输出24.000000,符合预期。

内容的提问来源于stack exchange,提问作者Rishab Ghosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:50:22