iOS NSUInteger 运算问题

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数据类型参与运算时,一定要注意数值的取值范围不能是负数,当为表达式结果为负数时,会以补码的形式转换数值结果。

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

推荐阅读更多精彩内容