踩坑场景
今天在使用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
。