luomengkang 发表于 2013-8-1 10:52:11

有个小问题问一下

为什么printf("%f\n",3/2);最后的结果为0.00000啊

我是师兄 发表于 2013-8-1 10:59:38

因为你的代码写错了 结果当然也是错的

海豚c 发表于 2013-8-1 11:03:15

额,3.0/2.0就是1.5了。坐等楼下大师讲解

编程难 发表于 2013-8-1 12:03:41

本帖最后由 编程难 于 2013-8-1 12:07 编辑

这个帖子之前有类似的了。3/2会被当做 整数/整数,结果也是整数。 得到的是商1 余 1。所以结果不是1.50000.

你把其中一个换乘float型的,结果就是float型的了。就能得到正确的结果了

luomengkang 发表于 2013-8-1 12:16:28

编程难 发表于 2013-8-1 12:03 static/image/common/back.gif
这个帖子之前有类似的了。3/2会被当做 整数/整数,结果也是整数。 得到的是商1 余 1。所以结果不是1.50000. ...

那这样说3/2得到的结果是整型的1,那么 整型1 转化为浮点型就成了0.0000吗

luomengkang 发表于 2013-8-1 12:17:02

我是师兄 发表于 2013-8-1 10:59 static/image/common/back.gif
因为你的代码写错了 结果当然也是错的

可这就是个题目呀

编程难 发表于 2013-8-1 12:39:01

luomengkang 发表于 2013-8-1 12:16 static/image/common/back.gif
那这样说3/2得到的结果是整型的1,那么 整型1 转化为浮点型就成了0.0000吗

这里有个问题,就是printf的时候不会采取默认类型转换的,只是把结果1所在的四字节(float占四字节)的内存单元的内容当做一个浮点数进行输出。所以结果就成了0了。这个又涉及到浮点数的存储问题。可以看看小甲鱼的视频,或者自己搜一下。

ps:如果调试能力够的话,可以看下printf的执行过程。

我是师兄 发表于 2013-8-1 13:09:27

luomengkang 发表于 2013-8-1 12:17 static/image/common/back.gif
可这就是个题目呀

题目是错的 在天朝是很正常的事情 题目涉及未定义行为 结果不确定 没答案

20125516 发表于 2013-8-1 15:35:03

3和2都为int型,则以%d打印为1,而你要求以浮点型打印则出错了。你只需将3与2改为3.0和2.0就对了。

565123 发表于 2013-8-2 21:52:38

浮点数和整数在内存中的存放方式是不同的,所以整型的1和浮点型的1是不一样的

LO阿狸° 发表于 2013-8-3 01:02:18

3/2默认形式输出是int整数型。而你用long float输出是不对的!

小C的小梦 发表于 2013-8-4 11:45:46

因为,输出运算不能这样计算。你的输出没有数值,故是零,

zsx_xiaoxin 发表于 2013-8-15 14:02:49

printf("%f\n",3./2);

血色熊猫 发表于 2013-9-25 19:46:31

printf("%lf,double(3/2));就可以出现你想要的结果,这个好像跟整形和实型的内存分布有关,好像吧

fishso 发表于 2013-9-25 22:15:29

printf从第二个参数开始必须是变量,不能用常量

花开淡墨痕 发表于 2013-11-19 17:07:50

printf("%f\n",3.0/2.0);

BoPo 发表于 2013-11-19 19:32:11

默认 3/2 是int类型,要强制转换类型才行

printf("%f\n", (float) 3/2);

莫名C 发表于 2013-11-19 20:47:40

什么情况   

飞驰吧!少年 发表于 2013-11-20 09:22:11

3/2=0.666666..
取的是整数,故得数取整数,so
3/2=0
页: [1]
查看完整版本: 有个小问题问一下