有个小问题问一下
为什么printf("%f\n",3/2);最后的结果为0.00000啊因为你的代码写错了 结果当然也是错的 额,3.0/2.0就是1.5了。坐等楼下大师讲解 本帖最后由 编程难 于 2013-8-1 12:07 编辑
这个帖子之前有类似的了。3/2会被当做 整数/整数,结果也是整数。 得到的是商1 余 1。所以结果不是1.50000.
你把其中一个换乘float型的,结果就是float型的了。就能得到正确的结果了
编程难 发表于 2013-8-1 12:03 static/image/common/back.gif
这个帖子之前有类似的了。3/2会被当做 整数/整数,结果也是整数。 得到的是商1 余 1。所以结果不是1.50000. ...
那这样说3/2得到的结果是整型的1,那么 整型1 转化为浮点型就成了0.0000吗 我是师兄 发表于 2013-8-1 10:59 static/image/common/back.gif
因为你的代码写错了 结果当然也是错的
可这就是个题目呀 luomengkang 发表于 2013-8-1 12:16 static/image/common/back.gif
那这样说3/2得到的结果是整型的1,那么 整型1 转化为浮点型就成了0.0000吗
这里有个问题,就是printf的时候不会采取默认类型转换的,只是把结果1所在的四字节(float占四字节)的内存单元的内容当做一个浮点数进行输出。所以结果就成了0了。这个又涉及到浮点数的存储问题。可以看看小甲鱼的视频,或者自己搜一下。
ps:如果调试能力够的话,可以看下printf的执行过程。 luomengkang 发表于 2013-8-1 12:17 static/image/common/back.gif
可这就是个题目呀
题目是错的 在天朝是很正常的事情 题目涉及未定义行为 结果不确定 没答案 3和2都为int型,则以%d打印为1,而你要求以浮点型打印则出错了。你只需将3与2改为3.0和2.0就对了。 浮点数和整数在内存中的存放方式是不同的,所以整型的1和浮点型的1是不一样的 3/2默认形式输出是int整数型。而你用long float输出是不对的! 因为,输出运算不能这样计算。你的输出没有数值,故是零, printf("%f\n",3./2); printf("%lf,double(3/2));就可以出现你想要的结果,这个好像跟整形和实型的内存分布有关,好像吧 printf从第二个参数开始必须是变量,不能用常量 printf("%f\n",3.0/2.0); 默认 3/2 是int类型,要强制转换类型才行
printf("%f\n", (float) 3/2); 什么情况 3/2=0.666666..
取的是整数,故得数取整数,so
3/2=0
页:
[1]