Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么arc4random有时返回负数?_Objective C_Gnustep_Arc4random - Fatal编程技术网

Objective c 为什么arc4random有时返回负数?

Objective c 为什么arc4random有时返回负数?,objective-c,gnustep,arc4random,Objective C,Gnustep,Arc4random,我使用arc4random生成特定范围内的数字。但是,我会间歇性地收到负数。我没有做任何奇怪的事: if([aBug x] == -1) { x = arc4random() % columns; } if([aBug y] == -1) { y = arc4random() % rows; } 这里,x和y有时被设置为负值。x和y都是int型。因为arc4random始终为正: arc4random函数返回0到2**32-1范围内的伪随机数 我必须推断列或行是任意负的。用负

我使用arc4random生成特定范围内的数字。但是,我会间歇性地收到负数。我没有做任何奇怪的事:

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

if([aBug y] == -1) {
    y = arc4random() % rows;
}
这里,x和y有时被设置为负值。x和y都是int型。

因为arc4random始终为正:

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

我必须推断列或行是任意负的。用负数修改正数将返回负数

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

因为arc4random总是正的:

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

我必须推断列或行是任意负的。用负数修改正数将返回负数


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

听起来您想将x和y声明为u_int32_t而不是int类型。也就是说,您应该使用无符号变量而不是有符号变量


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

听起来像是要将x和y声明为u_int32_t而不是int类型。也就是说,应该使用无符号变量而不是有符号变量


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

我也遇到了同样的问题。我不知道为什么这会修复它,但从

(int)arc4Random()%4


似乎对我有用。

我也有同样的问题。我不知道为什么这会修复它,但从

(int)arc4Random()%4


似乎对我有用。

很抱歉刚刚看到这个。看来SO没有给我关于这个问题答案的通知!列和行的类型都是int,都是正数。很抱歉刚才看到了这个。看来SO没有给我关于这个问题答案的通知!列和行都是int类型,并且都是正数。我基本上使用了NSUInteger,这似乎很有效。谢谢你给我指明了正确的方向!我基本上使用了NSUInteger,这似乎很有效。谢谢你给我指明了正确的方向!这里可能不重要,但一般建议使用arc4random_uniformcolumns。从文档中可以看出:arc4random_uniform建议用于arc4random%上界之类的构造,因为当上界不是二的幂时,它可以避免模偏差。这里可能并不重要,但通常建议使用arc4random_uniform列。从文档中可以看出:arc4random_统一建议用于类似arc4random%上限的构造,因为当上限不是二的幂时,它可以避免模偏差。