NSUInteger在反向循环混乱中?

时间:2014-04-11 14:29:19

标签: objective-c nsinteger nsuinteger

我想知道是否有人可以解释一下,我设置了一个循环,我想从10倒数到0:

for(NSUInteger index = 10; index >= 0; index--) {
    NSLog(@"INDEX: %ld", (long)index);
}

这个循环永远运行,它不会停在0,但会继续进入负数。当我注意到这一点时,我将代码更改为:

for(NSInteger index = 10; index >= 0; index--) {
    NSLog(@"INDEX: %ld", (long)index);
}

以上工作正常,但我很好奇,为什么第一个例子不起作用,因为生成的数字都是无符号整数?

2 个答案:

答案 0 :(得分:2)

无符号类型无法继续进入负数"。在index = 0的迭代之后,index--变为0xFFFFFFFF,仍然大于零。容易犯错,我自己也做过。

静态分析器实际上会警告你("条件索引> = 0总是正确"或者类似。)我强烈建议将其设置为在调试版本上自动运行。

答案 1 :(得分:1)

请注意,NSUInteger总是>> = 0,因此,您的循环条件将始终为真。