gpt4 book ai didi

objective-c - Objective-C : Unsigned int compare

转载 作者:太空狗 更新时间:2023-10-30 03:25:34 24 4
gpt4 key购买 nike

所以我在工作中遇到了一个大问题,因为我的代码中有这样的东西:

    int foo = -1;
NSArray *bar = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];
if (foo > [bar count]){
NSLog(@"Wow, that's messed up.");
} else {
NSLog(@"Rock on!");
}

你可能已经知道我发布这个,输出是:

“哇,真乱。”

据我所知, Objective-C 正在将我的负数转换为“有符号”整数,从而终止了我的比较。

我看到了关于此的其他帖子,他们都说明了问题所在,但没有人提出任何简单的解决方案来使这种比较真正起作用。此外,令我震惊的是没有编译器警告,因为这些警告给我带来了严重的问题。

最佳答案

问题

您遇到的问题是因为 foo 是一个有符号整数并且 -[NSArray count] 返回一个无符号整数,foo正在进行到无符号整数的隐式类型转换。参见 Implicit Type Conversion想要查询更多的信息。此外,在 C here 中还有关于类型转换规则的更多信息。 .

解决方案

-[NSArray count] 返回一个无符号值,因为数组永远不会有负数的元素;最小的可能值为 0。将数组的计数与 -1 进行比较没有多大意义 - 计数将始终大于任何负数(尽管存在符号问题)。

因此,这里正确的解决方案,也是避免此类问题的方法,是使用与 -[NSArray count] 的返回值相匹配的类型,即 NSUInteger(U 代表unsigned)。

关于objective-c - Objective-C : Unsigned int compare,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16161107/

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