iOS NSUInteger 运算问题
iOS中当NSUInteger参与运算时,一定要注意数值的取值范围。当表达式中存在有符号类型和无符号类型时全部的操做数都自动转换为无符号类型。
例如在下面场景中,数组的count是无符号数据NSUInteger,遍历中idx的单位也是无符号数据NSUInteger。

2022-03-21-1
如果两者都是 NSInteger 有符号数据类型,那么arr1.count = 1 , idx 分别为0,1,2, 所有(arr1.count-idx) 的值对应为1,0,-1, 所以打印结果应该为:
大于等于0
大于等于0
小于0
实际上,当arr1.count和idx的单位均为无符号数据NSUInteger时,打印结果为:

2022-03-21-2
从打印结果可以看到,当idx为2时,(arr1.count-idx)的结果以补码的方式转为了无符号类型的数值18446744073709551615。
结论:有符号NSUInteger数据类型参与运算时,一定要注意数值的取值范围不能是负数,当为表达式结果为负数时,会以补码的形式转换数值结果。