关于数字比较的格式统一问题

有时候真的是这样,一个看似很简单的东西,往往隐含着和想象中不一样的结果。

看下面一段代码

unsigned int b , c ;

int a ;

b = 5 ;

c = 10 ;

if(0>b-c)

a = 0 ;

else

a = 1 ;

如果问执行完上面一段语句,a的值是几,

可能许多人都说是0

实际上,结果是 1,如果不信可以试一试,至少我在VC6.0下试过,确实是这个样子,

一般来说,C++应该把0当成int 来处理的,

于是,就出现了int 与unsigned int之间的比较了

不同种类的数字相比较,往往容易出问题,

同样的情况,我以前遇到过

就是

int d = max(0,b-c) ;

结果d= -5 ;

那么如果要改正上面一段代码,需要怎么写呢,其实改法很多了

最简单的一种,就是在把if那一行

换成

if (0 > (int)b - (int)c)

这样得到的结果就是

 a = 0

其实不光是C++,Java也存在着这种迷题似的数据结果。有一篇名为《Java迷题》的文章,就详细说明了因为数据格式问题,而引起的种种匪夷的结果。其中的说明之精辟,远远高于我写的这篇。

文章地址为:http://www.java3z.com/cwbwebhome/article/article3/01.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值