我想知道是否有人可以解释一下,我设置了一个循环,我想从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);
}
以上工作正常,但我很好奇,为什么第一个例子不起作用,因为生成的数字都是无符号整数?
答案 0 :(得分:2)
无符号类型无法继续进入负数"。在index = 0的迭代之后,index--变为0xFFFFFFFF,仍然大于零。容易犯错,我自己也做过。
静态分析器实际上会警告你("条件索引> = 0总是正确"或者类似。)我强烈建议将其设置为在调试版本上自动运行。
答案 1 :(得分:1)
请注意,NSUInteger总是>> = 0,因此,您的循环条件将始终为真。