最近我在objective-c中比较有符号和无符号值时遇到了问题。下面是这个问题的一个例子:
NSArray *array = [NSArray array];
NSLog(@"Count = %d", array.count);
NSLog(@"Count - 2 = %d", array.count - 2);
if (array.count - 2 > 0) {
NSLog(@"A");
} else {
NSLog(@"B");
}
乍一看似乎应该打印以下代码B
。但是,当您运行它时,您会看到:
Count = 0
Count - 2 = -2
A
现在我知道问题在于比较有符号和无符号值(array.count
is unsigned long
)。
然而,这种错误很难发现(代码编译,没有警告,你可能没有注意到它array.count
是无符号的,它很重要)。问题是我怎样才能避免这种情况?有比较有符号和无符号值的安全方法吗?
这也很有趣,为什么要NSLog(@"%d", array.count - 2)
打印-2
?