0

我想知道是否有人可以解释一下,我设置了一个循环,我想从 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);
}

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

4

2 回答 2

2

无符号类型不能“继续输入负数”。在index = 0时的迭代后,index--变为0xFFFFFFFF,仍然大于零。容易犯的错误,我自己做过。

静态分析器实际上会警告您这一点(“条件索引 >= 0 始终为真”或诸如此类。)我强烈建议将其设置为在调试版本上自动运行。

于 2014-04-11T14:33:59.747 回答
1

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

于 2014-04-11T14:36:51.887 回答