iOS:NSInteger和NSUInteger比较

Hem*_*ang 1 comparison objective-c nsinteger nsuinteger ios

惊喜!

我有一个像这样的变量,

NSInteger index = 0;
Run Code Online (Sandbox Code Playgroud)

我正在将它与其中一个子视图count(返回NSUInteger)进行比较,

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

这总是假的.

但如果我这样做,

if ((index-1) <= 42) {
    NSLog(@"true");
} else {
    NSLog(@"false");
}
Run Code Online (Sandbox Code Playgroud)

这总是给人的.

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

当我有一个基于这种逻辑的工作解决方案时,我发现了这个问题.但它根本不是真的.

Hem*_*ang 5

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

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


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

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

NSInteger si = -1;
NSUInteger ui = 1;
printf("%d\n", si < ui);
Run Code Online (Sandbox Code Playgroud)

原因是[si]变量被隐式转换为unsigned int!

请参阅CERT的安全编码站点,深入讨论这些"问题"以及如何解决这些问题.