【发布时间】:2012-09-30 15:40:28
【问题描述】:
最近我在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 是 unsigned long)。
但是,这种错误很难发现(代码编译,没有警告,您可能没有注意到array.count 是无符号的,这很重要)。 问题是如何避免这种情况?有比较有符号和无符号值的安全方法吗?
为什么NSLog(@"%d", array.count - 2) 打印-2 也很有趣?
【问题讨论】:
标签: objective-c ios cocoa-touch unsigned signed