arc4random_uniform() 的奇怪结果。发生了什么
Strange result from arc4random_uniform(). Whats happened
昨天我有以下代码:
NSInteger test = arc4random_uniform(10)-5;
如果我通过调试器检查内部测试内容,有时它不是 -5 到 5 之间的数字。
有时它是一个随机的大整数。
在我将代码更改为:
NSInteger test = arc4random_uniform(10);
test -= 5;
我只得到了 -5 到 5 之间的数字。
我是 Objectiv C 的新手,通常我只写 C/C++。但这对我来说毫无意义。
谁能解释一下发生了什么?
arc4Random 函数族 return u_int32_t
。 "u_"表示无符号,用字面量5
决定表达式的类型。因此第一个表达式将(大约一半的时间,对于随机数 < 5)产生一个无符号的负数,这将被视为接近 UINT_MAX
.
第二个表达式首先将随机数转换为有符号整数,因此后续减法按预期进行。
昨天我有以下代码:
NSInteger test = arc4random_uniform(10)-5;
如果我通过调试器检查内部测试内容,有时它不是 -5 到 5 之间的数字。 有时它是一个随机的大整数。
在我将代码更改为:
NSInteger test = arc4random_uniform(10);
test -= 5;
我只得到了 -5 到 5 之间的数字。 我是 Objectiv C 的新手,通常我只写 C/C++。但这对我来说毫无意义。
谁能解释一下发生了什么?
arc4Random 函数族 return u_int32_t
。 "u_"表示无符号,用字面量5
决定表达式的类型。因此第一个表达式将(大约一半的时间,对于随机数 < 5)产生一个无符号的负数,这将被视为接近 UINT_MAX
.
第二个表达式首先将随机数转换为有符号整数,因此后续减法按预期进行。