| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 701 人关注过本帖
标题:奇怪的问题,关于!=
只看楼主 加入收藏
jiangzhen3s
Rank: 1
来 自:福建宁德古田
等 级:新手上路
帖 子:102
专家分:0
注 册:2009-2-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
奇怪的问题,关于!=
int a;
    a=0.5-0.4!=0.1;
    printf("%d",a);;

输出结果居然是1!
反汇编的截图,不会看,为什么计算a=0.5-0.4!=0.1的汇编代码没有?

未命名.jpg (22.18 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 奇怪 
2009-08-22 00:00
jiangzhen3s
Rank: 1
来 自:福建宁德古田
等 级:新手上路
帖 子:102
专家分:0
注 册:2009-2-27
收藏
得分:0 
是因为计算机误差导致的0.5-0.4=0.0999...9999978

坚持--固执
2009-08-22 00:26
harleypang
Rank: 2
等 级:论坛游民
帖 子:6
专家分:14
注 册:2009-8-22
收藏
得分:0 
因为是整数,所以0.5-0.4=0-0=0
0!=0.1逻辑值为1
所以a=1
2009-08-22 09:32
yinfulin1b2b
Rank: 2
等 级:论坛游民
帖 子:24
专家分:30
注 册:2009-8-17
收藏
得分:0 
三楼的说的对,定义的变量是整形的,0.5-0.4=0.1
然后0.1赋值给整型变量a,则a=0,
所以0!=1是对的,返回1了
2009-08-22 16:56
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:20 
三楼错解,如果那样的话,a&amp;nbsp;打印出来就是0而不是1.<br>首先0.5-0.4!=0.1运算是常量运算,在编译期它的数值就算好了,所以看汇编时,没有它的运算汇编,只有一个常量值1的移动汇编。<br>然后就是数值是1是为什么,二楼已经给出正确答案。<br>这是浮点数比较的特殊性,和其它类型的比较的不同地方。
本例中,类型的转换发生在赋值时,而赋值是在最后发生,而不是在运算之前,所以运算还是按浮点数来运算的。

[ 本帖最后由 debroa723 于 2009-8-22 21:05 编辑 ]
2009-08-22 21:01
快速回复:奇怪的问题,关于!=
数据加载中...
 
   



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

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