FOR命令中的expression式(for(int i = 0; i <( -1); i ++){})

我有一个我无法理解的问题

NSArray *emptyArr = @[]; for (int i=0; i < ([emptyArr count]-1) ; i++) { NSLog(@"Did run for1"); } 

[emptyArr count] -1是-1,但我的应用程序仍然运行NSLog命令!

如果我使用一个intvariables:

 NSArray *emptyArr = @[]; int count = [emptyArr count]-1; for (int i=0; i < count ; i++) { NSLog(@"Did run for1"); } 

那么我的应用程序不会运行NSLog命令。

任何人都可以帮助我!

这是因为count的返回types是一个unsigned int 。 当你从0减去1时,你不会得到-1。 相反,你下溢到尽可能高的unsigned int 。 它在第二个版本中工作的原因是因为你把它(隐式地)转换成值-1是合法的int

[emptyArr count]-1从不小于0,因为它是无符号的。 我猜如果你做((int)[emptyArr count]-1) ,你会得到正确的行为。

由[emptyArr计数]返回的值是无符号整数。 在第一种情况下,[emptyArr count] -1在2的恭维中表示为0-1,这是一个很大的数字。 所以它会多次打印日志。

在第二种情况下,[emptyArr count] -1 – >您将这个结果转换为int。 0-1 – > -1有符号整数。 因此不打印。