我有一个问题我不明白
NSArray *emptyArr = @[];
for (int i=0; i < ([emptyArr count]-1) ; i++) {
NSLog(@"Did run for1");
}
[emptyArr count]
-1是-1,但我的应用程序仍然运行NSLog
命令!
如果我使用int变量:
NSArray *emptyArr = @[];
int count = [emptyArr count]-1;
for (int i=0; i < count ; i++) {
NSLog(@"Did run for1");
}
然后我的应用程序不运行NSLog
命令。
谁来帮帮我!
这是因为count
的返回类型是无符号 int
。当你用0减去1时,得到的不是-1。相反,你下流到最高的unsigned int
。它在第二个版本中工作的原因是因为您将它(隐式地)强制转换为值-1合法的int
。
[emptyArr count]-1
永远不会小于0,因为它是无符号的。我猜如果你做((int)[emptyArr count]-1)
,你会得到正确的行为。
[emptyArr count]返回值为无符号整数。在第一种情况下,[emptyArr count]-1表示0-1,这是一个很大的数字。因此,它会多次打印日志。
在第二个例子中,[emptyArr count]-1 ->将结果强制转换为int。0-1 -> -1有符号整型。因此不打印。