Objective c 为什么arc4random有时返回负数?
我使用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范围内的伪随机数 我必须推断列或行是任意负的。用负
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%上限的构造,因为当上限不是二的幂时,它可以避免模偏差。