美文网首页iOS开发
iOS 中 MAX(A,B) 遇到 NSUInteger 的坑

iOS 中 MAX(A,B) 遇到 NSUInteger 的坑

作者: swift加oc | 来源:发表于2017-11-17 09:56 被阅读150次

一次开发过程中竟遇到用 MAX函数比较 0 和 -1 时返回的是较小的值 -1
简直逆天了。

使用场景大概如下:

 NSArray *array = [NSArray array];
 NSInteger result = MAX(array.count - 1,0);

结果 result 竟然是 -1

经分析发现 NSArray 的 count 属性是 NSUInteger 类型,而对 NSUInteger 类型的变量赋值 -1 会导致溢出实际值则是一个很大的正数。因此 MAX 函数把较大的数值 NSUInteger 型的 -1 返回出来了。

所以在我们使用 MAX 函数取较大数值时一定注意参数类型是否为 NSUInteger 如果有必须转为有符号类型。如

NSInteger result = MAX((NSInteger)(array.count - 1),0);

相关文章

网友评论

    本文标题:iOS 中 MAX(A,B) 遇到 NSUInteger 的坑

    本文链接:https://www.haomeiwen.com/subject/ezmdvxtx.html