为何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
相关产品推荐
相关产品推荐

