1

惊喜!

我有一个这样的变量,

NSInteger index = 0;

我将它与这样的子视图计数(返回NSUInteger)之一进行比较,

if((index-1) <= [[currentmonth subviews] count]) 
{
    NSLog(@"true");
}
else
{
    NSLog(@"false");
}

这总是假的。

但如果我这样做,

if ((index-1) <= 42) {
    NSLog(@"true");
} else {
    NSLog(@"false");
}

这总是给真。

我觉得,这是因为我们无法NSIntegerNSUInteger正确的比较?

当我有一个基于此逻辑的可行解决方案时,我发现了这个问题。但它根本不是真的。

4

1 回答 1

5

我发现了这个,NSUInteger vs NSInteger,int vs unsigned,以及类似的案例

这个答案对此给出了很好的解释!


在处理 NSUInteger 与 NSInteger 时,您还应该注意整数转换规则:

例如,以下片段返回 0(假),尽管您希望它打印 1(真):

NSInteger si = -1;
NSUInteger ui = 1;
printf("%d\n", si < ui);

原因是 [si] 变量被隐式转换为无符号整数!

有关这些“问题”以及如何解决这些问题的深入讨论,请参阅CERT 的安全编码站点。

于 2014-08-25T06:54:15.420 回答