场景描述:
看下面代码的输出结果是什么?
NSInteger index = 0;
NSUInteger length = 0;
if (index > length - 1) {
NSLog(@"0大于-1");
}else {
NSLog(@"0不大于-1");
}
输出结果是:0不大于-1
原因分析
首先,我们打印一下length - 1
的值,NSLog(@"length - 1 = %ld", length - 1);
,输出结果为length - 1 = -1
,那么为什么结果是0不大于-1
,而不是0大于-1
呢?
我们换一种方式打印一下length - 1
的值,NSLog(@"length - 1 = %lu", length - 1);
输出结果为length - 1 = 18446744073709551615
,到这里应该明白为什么会这样了,因为length
为NSUInteger
类型,所以length - 1
也是NSUInteger
类型。(注:NSInteger
为long
类型,NSUInteger
为unsigned long
类型)
解决办法
方法一:强制类型转换
NSInteger index = 0;
NSUInteger length = 0;
if (index > (NSInteger)length - 1) {
NSLog(@"0大于-1");
}else {
NSLog(@"0不大于-1");
}
输出结果是:0大于-1
方法二:避免NSUInteger类型数做减法
NSInteger index = 0;
NSUInteger length = 0;
if (index + 1 > length) {
NSLog(@"0大于-1");
}else {
NSLog(@"0不大于-1");
}
输出结果是:0大于-1
网友评论