iOS开发 使用NSUInteger时遇到的坑

踩坑场景

今天在使用NSUInteger的时候,遇到了一个坑,代码如下:

for (NSUInteger i = array.count - 1; i >= 0; i--)
{
    // do something
}

运行以上代码后,for循环会无限循环。

原因

一脸懵逼的我打印调试了小半天后,发现当变量i等于0时,再次执行i--操作后,变量i并不等于-1,而是等于18446744073709551615。这是因为变量i是无符号整型,将-1赋值给变量i时,-1会被强制转换为一个很大的正整数。所以变量i的值会始终大于等于0,从而导致无限循环。

另一个关于NSUInteger的坑

伪代码如下:

NSUInteger count = 0;

NSInteger a = -10;

if( a < count ) 
{
    // do something
}

运行以上代码后,if判断结果为NO,不会执行括号里面的操作。

这是因为在比较一个有符号整型变量与一个无符号整型变量的大小时,有符号整型变量会被强制转换为无符号整型变量,所以-10会被转换为一个很大的正整数,导致if判断结果为NO

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

推荐阅读更多精彩内容