【发布时间】:2010-11-15 05:15:12
【问题描述】:
srand(time(null));
printf("%d", rand());
给出一个高范围的随机数(0-32000ish),但我只需要大约 0-63 或 0-127,虽然我不知道如何去做。有什么帮助吗?
【问题讨论】:
-
这里要记住两件事: 1. 永远不要去掉高位,因为低位通常不太随机。 2. 除非你真的不需要好的随机数,否则不要使用系统提供的 rand()。
-
以后我会使用更好的RNG,现在我只是在玩弄随机生成图像。
-
@David:你不需要记住这两件事,只需要记住第二件事。如果您从不使用 rand(),则不必担心其中的哪些位在典型实现中是糟糕的。如果你使用好的 RNG,那么低位和高位一样好。
-
相关:How to generate a random int in C?。 Here is my answer there,其中包含我的
int utils_rand(int min, int max)func 的定义,它使用rand()返回一个随机数,该随机数在min到max的特定范围内,包括在内,因此也回答了这个问题。我还缩放以允许min是INT_MIN和max是INT_MAX的情况,这通常不能单独使用rand(),因为它返回从0到RAND_MAX的值,包括(1 /2 那个范围)。