printf(“%.1f\n“,8/5)的输出结果为什么是0.000000

解析printf函数处理不同类型数据时的行为,特别是在处理整数和浮点数运算及存储大小上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因在于printf函数printf函数不会进行任何类型转换,它只是从内存中读出你所提供的元素的值。

8/5的算术表达式的到的是一个整型常量1,它被以整型存储在内存中。

printf("%d\n", sizeof(8.0/5.0));
printf("%d\n", sizeof(8/5));
printf("float: %d\n", sizeof(float));
printf("int: %d\n", sizeof(int));

在我的环境下,float和int均为四字节,而浮点常量则是以8字节的double进行存储,而printf输出时,float是当double处理的,同样是使用8字节,当一个四字节数据用八字节浮点数的形式读出的时候,也就是会读之前的很多位0,最后按照(有效数字)×(基数2)pow(指数)的方式来取数,自然结果是0.000000

在例如如下程序中

printf("%f\n", 8/5);

printf("%f\n", 8.0/5.0);
printf("%f\n", 8/5);

在单独输出8/5时产生的是0.000000,而如果在输出8/5之前正常的输出一个浮点数据,那么在输出8/5时则产生了一个接近于1.600000的结果,原因应该与上述理由相同,printf在使用%f输出整型常量时,额外的读取了不属于整型大小的8字节数据,进而产生了区别于正确结果的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值