有人可以告诉我如何正确写作
arc4random() %#;
不仅包括正数而且包括负数? 我想要一个图像(来自Sprite Kit的SKSpriteNode)能够在2D环境中随机移动。
答案 0 :(得分:3)
arc4random()
返回类型为u_int32_t
,unsigned 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)
范围内的值。