今天一个很奇怪的bug,明明数据都对,但代码执行的逻辑就是不对。模拟代码如下:
NSInteger start = -1;
NSUInteger maxCount = 10;
if( start < maxCount ){
NSLog(@"1");
}else{
NSLog(@"2");
}
输出结果是什么?
第一眼望去,可能都觉得这是一道送分题。然后当你仔细想想,也许会觉得出题人应该不会这么弱智。因此你决定反其道而行之,你选择输出2 ,果然,你的聪明让你猜对了。看着正确的结果,你想知道这背后到底有什么猫腻,于是你开始回头看,发现了一个小小的区别,NSUInteger 与NSInteger 中间差了个U,于是乎,你大胆预测,就是这个U惹的祸,计算机本科出身的你,猛然间豁然开朗,心想:这明明是一道基础题,太TM的基础了,基础到大家都忘记了这东西的存在了。你似乎明白了一个道理,“基础才是最重要的,简单的才是最关键的”,你决定记录下这个基础,所以你写下了这样的一句话在你的日记本上。如下:
在OC中,无符号类型与有符号类型进行基础运算,如加减乘除,比较大小时,无符号类型会被自动转换为有符号类型。阿弥陀佛!
网友评论