我想知道是否有人能解释一些事情,我设置了一个循环,其中我想从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);
}上面的方法很好,但是我很好奇,为什么第一个例子不能工作,因为生成的数字都是无符号整数?
发布于 2014-04-11 14:33:59
一个没有符号的类型不能“一直进入负数”。迭代后,当index =0时,index-变为0xFFFFFFF,该值仍然大于零。很容易犯错误,我自己做过。
静态分析器实际上会警告您这一点(“条件索引>= 0始终为真”之类)。我强烈建议将其设置为在调试版本上自动运行。
发布于 2014-04-11 14:36:51
请注意,NSUInteger始终是>= 0,因此,循环条件将始终为真。
https://stackoverflow.com/questions/23015452
复制相似问题