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

一次开发过程中竟遇到用 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);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容