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).所以我觉得使用负整数存在一些问题,我没有得到.
先感谢您.
我怀疑问题是返回count是无符号整数,并且减去超过它的幅度,它会下溢并变得非常大.我已经运行了一些测试,并且我得到了与你相同的基本行为(它看起来像是-1,并且在某些情况下它看起来像预期的那样工作......但是它显然在if()块的上下文中被下溢了.
愚蠢的问题,但幸运的是有一个简单的解决方案:在if语句中将其强制转换:
if([self.selectedSetpoint row] < ( (int)[self.theCategories count] -3 ))
{
//Do true stuff
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1976 次 |
| 最近记录: |