gpt4 book ai didi

objective-c - 比较 objective-c 中的有符号和无符号值

转载 作者:可可西里 更新时间:2023-11-01 04:23:53 25 4
gpt4 key购买 nike

最近我遇到了在 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.countunsigned long)。

然而,这种错误很难发现(代码编译,没有警告,你可能没有注意到 array.count 是无符号的,它很重要)。 问题是我怎样才能避免这种情况?有比较有符号和无符号值的安全方法吗?

同样有趣的是,为什么 NSLog(@"%d", array.count - 2) 打印 -2

最佳答案

首先,比较有符号数和无符号数是不安全的,在您的情况下 array.count - 2 是一个无符号数。

其次,它打印 -2,因为您使用了 %d,它是有符号整数的格式化程序。要打印无符号整数,请使用 %u

关于objective-c - 比较 objective-c 中的有符号和无符号值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12814749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com