鱼C论坛

 找回密码
 立即注册
查看: 4402|回复: 7

关于以下代码运行后的计算结果与我自己口算的结果不符

[复制链接]
发表于 2013-4-27 15:59:44 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>
void main()
{
        printf("%f\n",9/3);
}


口算得出的结果应该是3,可是为什么用上面那个代码运算出来的结果是0啊?

最佳答案

查看完整内容

表达式9/3的值的类型是int,要用 %d打印。 当你用%f打印的时候,首先会将4字节的int理解为8字节的doble(printf会自动把float转换为double),接着double在内存中以IEEE754的长浮点数的格式存储,因此将把这个int按照该格式来理解,得到的结果就是0
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-4-27 15:59:45 | 显示全部楼层
表达式9/3的值的类型是int,要用 %d打印。

当你用%f打印的时候,首先会将4字节的int理解为8字节的doble(printf会自动把float转换为double),接着double在内存中以IEEE754的长浮点数的格式存储,因此将把这个int按照该格式来理解,得到的结果就是0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-27 16:25:35 | 显示全部楼层
本帖最后由 avpemp 于 2013-4-27 16:30 编辑

有点不太懂。。。虽然我把%f改成了%d之后,答案是正确了,但是我找不出原因。
请问下我出这个问题是因为我“数据类型,运算符和表达式这一章”有什么地方没掌握好吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-27 17:00:55 | 显示全部楼层
楼主改成9.0/3
或者9/3.0就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-28 03:37:11 | 显示全部楼层

你可以google下计算机是如何存储浮点数的,有一个格式,存储方式和int方式不一样。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-4-28 07:04:39 | 显示全部楼层
我只是路过打酱油的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-28 14:10:41 | 显示全部楼层
熊文杰 发表于 2013-4-28 03:37
你可以google下计算机是如何存储浮点数的,有一个格式,存储方式和int方式不一样。

哦哦,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-4-28 14:12:03 | 显示全部楼层
仰望天上的光 发表于 2013-4-27 15:59
表达式9/3的值的类型是int,要用 %d打印。

当你用%f打印的时候,首先会将4字节的int理解为8字节的doble(p ...

谢谢你的解答。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-31 02:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表