arc4random()positive&负数

时间:2014-11-21 17:07:55

标签: objective-c ios8 xcode6 negative-number arc4random

有人可以告诉我如何正确写作

arc4random() %#;

不仅包括正数而且包括负数? 我想要一个图像(来自Sprite Kit的SKSpriteNode)能够在2D环境中随机移动。

2 个答案:

答案 0 :(得分:3)

arc4random()返回类型为u_int32_tunsigned int,因此无法直接返回负数。
你需要操纵'它是为了获得正面或负面的范围。

首先,我建议使用arc4random_uniform()而不是arc4random() %,因为它避免了" modulo偏差"当上限不是2的幂时。

至于你的问题,你可以通过减去想要的范围来做到以下几点 例如:

arc4random_uniform(100);  

将给出0到99之间的值,
但是通过这样减去50:

arc4random_uniform(100) - 50;  

我们现在将得到-50到49之间的随机值;

编辑 - 如果您将结果分配给变量,我认为您需要键入强制转换arc4random_uniform结果以避免编译器警告,但我不确定是否有必要。
所以它看起来像这样:

int randomNumber = (int)arc4random_uniform(100) - 50;

答案 1 :(得分:1)

  

不仅包括正数而且包括负数?

你不能。 arc4random()返回无符号值(u_int32_t)。

可以做的是将返回值的范围减去一半的范围。也就是说,如果您通常执行以下操作:

 int x = arc4random() % 20;

要获得[0, 20)范围内的值,您可以改为:

 int x = (arc4random() % 20) - 10;

获取[-10, 10)范围内的值。