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