arc4random_uniform()产生奇怪的结果。发生了什么

时间:2019-01-28 16:22:31

标签: objective-c arc4random

昨天我有以下代码:

NSInteger test = arc4random_uniform(10)-5;

如果我通过调试器检查了测试内部的内容,有时不是-5到5之间的数字。 有时是一个随机的大整数。

将代码更改为此后:

NSInteger test = arc4random_uniform(10);
test -= 5;

我只能得到-5到5之间的数字。 我对Objectiv C很陌生,通常我只写C / C ++。但这对我来说毫无意义。

有人可以解释发生了什么事吗?

1 个答案:

答案 0 :(得分:3)

arc4Random系列函数返回u_int32_t。 “ u_”表示无符号,并使用文字5确定表达式的类型。这样第一个表达式(对于随机数<5,大约是一半的时间)将产生一个无符号负数,该负数将被视为接近UINT_MAX

第二个表达式首先将随机数转换为带符号的int,因此后续的减法将按预期工作。