鱼C论坛

 找回密码
 立即注册
查看: 1812|回复: 3

有疑问,求解答。。

[复制链接]
发表于 2015-1-18 17:14:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
printf("%f\n",1.0/3*3);printf("%f\n",3/2); printf("%f\n",1/3*3);printf("%d\n",1.0/3*3);printf("%d\n",3/2); printf("%d\n",1/3*3);区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-18 19:00:02 | 显示全部楼层
看了这个,楼主大概会明白了吧,这是网上找的:
float a=7.5f;
        如果用printf("%d",a);输出的是0。
        但float型用%d输出是否一定是0呢,答案肯定不都是0;
        为什么 7.5 用%d输出的是0?分析如下:
        首先来了解下printf的输出格式,int 和 long int 都是32位的,用%d输出;float 、double都是%f输出,但 float 是32位的,double 是64位的,所以在参数传递的时候C语言统一将 float 类型数值传换为 double 类型再传入 printf 函数。如果是32位整型则输出格式为%lld。
        下面来讲一下  float a=7.5f ; printf("%d",a)输出为0的情况:
        %d只输出低32位的数据,并将这些32位二进制以十进制数输出,编译器首先将 7.5从float类型转换为double类型,7.5在内存中的存放方式是0x40f00000,转换成double类型在内存中的数据就是这个0x401e000000000000,这个内存数据可以很明显看出低32位全是0,而%d则只能截取到低32位,所以这个以%d输出7.5的数值当然是 0了。如大家不相信可以用%lld 输出看看,这个%lld就很读到低64位数据,读出的结果就是0x401e000000000000,在屏幕上看到一个很大的十进制数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-19 11:16:45 | 显示全部楼层
%f打印出来的是float类型,可以打印出小数点后面的数。%d打印出的是整型类型,不能打印出小数点后面的数,小数点后面的数会被舍去。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-19 21:07:53 | 显示全部楼层
这是很基础的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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