if语句中的错误布尔结果

时间:2015-05-15 10:07:36

标签: ios objective-c

此代码应将 false 打印到控制台,但会打印 true

NSMutableArray *data = [[NSMutableArray alloc]init];

UILabel *label = [[UILabel alloc] init];
label.tag = 7;

if(label.tag <= (data.count - 1)) {
    NSLog(@"true");
} else {
    NSLog(@"false");
}

任何人都可以解释这个吗?

1 个答案:

答案 0 :(得分:3)

data.count0,但它是无符号整数(NSUInteger)。

(data.count - 1)在这种情况下0 - 1不等于-1,因为整数是无符号的。它将是最大整数(4294967295)。我们称之为整数下溢

您可以轻松修复

label.tag + 1 <= data.count

使用无符号整数,您总是要小心减法。 另一种解决方法是使用强制转换为有符号整数:

label.tag <= ((NSInteger) data.count) - 1