| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 532 人关注过本帖
标题:为什么会这样呢??
只看楼主 加入收藏
xiaoxianhd
Rank: 1
等 级:新手上路
帖 子:25
专家分:6
注 册:2013-2-17
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:10 
为什么会这样呢??
main()
{
    float f=5.75;
    printf("f=%d,f=%f\n",f,f);   原代码是printf("(int)f=%d,f=%f\n",(int)f,f)结果是f=5 f=5.750000
}
我把(int)去了运行结果为f=0 f=0.000000,为什么?
2013-03-01 18:30
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:2 
  printf("f=%f,f=%d\n",f,f);  试一下改成这样,或加一句结果会怎样

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-01 19:25
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:2 
呵呵,学习啦
2013-03-01 19:30
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
噢?我说什么了?

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2013-03-01 19:32
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:2 
以下是我个人见解:
int型占2个字节,也就是16位,float占4个字节,也就是32位,
你用%d输出单精度数,编译器会找到后面变量的前两个字节(也就是16位)输出,
所以会是0。如果你换个很大的单精度数,就不是0了。
2013-03-01 21:17
wry5rd
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2013-3-1
收藏
得分:2 
不知道是不是5楼说的那样,不过什么叫很大的单精度数?不懂~
2013-03-01 21:25
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:0 
回复 6楼 wry5rd
就是你别用5.75,用5432154321.57试试,就是让它的前两个字节中有存储的东西,输出就不会是0了。
2013-03-01 23:21
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:0 
回复 楼主 xiaoxianhd
好吧,我承认我错了……不是那样的。
对于这种问题,你自己调试下看看吧,看看编译器是怎么处理的。
我调试看了下,木看懂……对您的误导,我深表歉意!
2013-03-02 11:38
模糊
Rank: 2
等 级:论坛游民
帖 子:56
专家分:53
注 册:2013-2-26
收藏
得分:2 
和我以前问的问题一样
2013-03-02 11:58
模糊
Rank: 2
等 级:论坛游民
帖 子:56
专家分:53
注 册:2013-2-26
收藏
得分:0 
2013-03-02 12:00
快速回复:为什么会这样呢??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036173 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved