来自 arc4random_uniform() 的奇怪结果.发生了什么事



昨天我有以下代码:

NSInteger test = arc4random_uniform(10)-5;

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

在我将代码更改为以下内容后:

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

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

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

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

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

相关内容

最新更新