为什么arc4random有时会返回负数?

时间:2012-08-26 19:18:40

标签: objective-c gnustep arc4random

我正在使用arc4random()生成某个范围内的数字。但是,我会间歇地收到负数。我没有做任何奇怪的事情:

if([aBug x] == -1) {
    x = arc4random() % columns;
}

if([aBug y] == -1) {
    y = arc4random() % rows;
}

此处,xy有时会设置为负值。 xy都属于int类型。

2 个答案:

答案 0 :(得分:4)

由于arc4random()始终为正:

  

arc4random()函数返回0到(2 ** 32)-1范围内的伪随机数

[Source]

我必须推断columnsrows是“任意”否定的。将正数编号为负数将返回负数。

行和列的数据类型是什么?

答案 1 :(得分:4)

听起来你想要声明x和y是u_int32_t类型而不是int。即,您应该使用无符号变量而不是签名。

或者,使用大于32位的有符号整数(例如uint64_t / long long)。