鱼C论坛

 找回密码
 立即注册
查看: 2367|回复: 10

实型数按整型输出会影响数据本身是吗?

[复制链接]
发表于 2014-9-24 17:48:34 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 风之残月 于 2014-11-10 10:44 编辑

QQ截图20140924174724.jpg
如图,实型数按整型输出会影响数据本身是吗?

最佳答案

查看完整内容

数据本身没有变,只是float在内存中的存放格式就和int不同,所以用int的方式读取float数据,一般就变成0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-24 17:48:35 | 显示全部楼层
数据本身没有变,只是float在内存中的存放格式就和int不同,所以用int的方式读取float数据,一般就变成0了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-9-24 19:05:59 | 显示全部楼层
漩涡鸣人 发表于 2014-9-24 18:24
数据本身没有变,只是float在内存中的存放格式就和int不同,所以用int的方式读取float数据,一般就变成0了

那为什么第二个数也显示为0.000000了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-24 19:08:30 | 显示全部楼层
不会,因为f数据类型本身没有变化,只是(int)f这个整体的类型是int型,这本身不能够改变f的数据类型,也不能改变其数值大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-24 19:10:29 | 显示全部楼层
xia_米 发表于 2014-9-24 19:05
那为什么第二个数也显示为0.000000了

第一个读取失败之后,第二个%f继续读取上次失败留下来的数据,在printf里面类型混用可能会出很多问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-25 00:11:32 | 显示全部楼层
肯定要影响的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-25 00:13:03 | 显示全部楼层
哦,我意思是输出要影响。但存储数据的地方是不影响的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-25 19:14:52 | 显示全部楼层
数据本身不会变,只是会改变显示内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-26 10:12:28 | 显示全部楼层
printf("%d%f",(int)f,f)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-4 11:52:25 | 显示全部楼层
楼上正解!!学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-4 22:29:32 | 显示全部楼层
首先,printf函数会自动将float类型的参数自动转换为double类型的参数。
所以printf("(int)f=%d, f=%f\n",f,f);函数的3个参数类型为const char*,double,double
double类型在32位系统下占据8个字节。
C语言对函数的处理是先将函数参数从右到左入栈,然后函数体内在读取这些参数进行处理。
所以printf函数被调用前会先将两个f(double类型)入栈,再将const char*类型参数(即字符串地址)入栈。
于是这三个参数在堆栈中的地址可能为(这仅仅是假设的情况):
const char*类型参数地址:  4
第一个f参数地址:                8
第二个f参数地址:                16
而printf中的格式化字符串中是%d...%f所以printf函数会将地址8处的参数认为是一个int类型(即取该double类型的低4字节地址作为int类型),紧接着取地址12处的8个字节作为第2个double参数,所以这两个参数都错了。
根据上面的分析,你可以将
printf("(int)f=%d, f=%f\n",f,f);改为
printf("(int)f=%f, f=%d\n",f,f);就会发现第一个参数%f正确的打印出来了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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