有时候真的是这样,一个看似很简单的东西,往往隐含着和想象中不一样的结果。
看下面一段代码
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