负整数比较

Jus*_*son 3 iphone objective-c ios

我想比较两个整数.一个是rowa NSIndexPath,另一个是counta NSArray.该row等于0,count等于2.我让他们在if声明如下:

if([self.selectedSetpoint row] < ([self.theCategories count]-3))
{
    //Do true stuff
}
Run Code Online (Sandbox Code Playgroud)

所以根据我的数学,这个if陈述应该是假的,因为我在比较0 < -1.但是,我一直认为这句话是正确的,并且if正在运行中的块.我试过NSLog这些值,以确保我不只是得到错误的值.我在if声明之前把它放在了正确的位置:

NSLog(@"%d",[self.selectedSetpoint row]);
NSLog(@"%d",[self.theCategories count]-3);
NSLog(@"%@",[self.selectedSetpoint row] < ([self.theCategories count]-3)?@"Yes":@"No");
Run Code Online (Sandbox Code Playgroud)

并在控制台上得到这个:

2012-07-17 08:58:46.061 App[61345:11603] 0
2012-07-17 08:58:46.061 App[61345:11603] -1
2012-07-17 08:58:46.062 App[61345:11603] Yes
Run Code Online (Sandbox Code Playgroud)

有什么想法为什么这个比较是真的?我是否误解了比较整数的问题?

我在这个比较上面的另一个if语句

[self.selectedSetpoint row]<([self.theCategories count]-2)
Run Code Online (Sandbox Code Playgroud)

哪个是0 < 0,它工作正常(返回NO).所以我觉得使用负整数存在一些问题,我没有得到.

先感谢您.

Chr*_*hey 6

我怀疑问题是返回count无符号整数,并且减去超过它的幅度,它会下溢并变得非常大.我已经运行了一些测试,并且我得到了与你相同的基本行为(它看起来像是-1,并且在某些情况下它看起来像预期的那样工作......但是它显然在if()块的上下文中被下溢了.

愚蠢的问题,但幸运的是有一个简单的解决方案:在if语句中将其强制转换:

if([self.selectedSetpoint row] < ( (int)[self.theCategories count] -3 ))
{
    //Do true stuff
}
Run Code Online (Sandbox Code Playgroud)