使用取模运算符获取特定范围内的随机变量

Using a modulus operator to get a random variable in a certain range

抱歉,我知道已经发布了类似的问题,但这本书仍然让我感到困惑。

在"C Programming: Absolute Beginner's Guide"中有一行:

dice1 = (rand() % 5) + 1;

为骰子游戏生成 1 到 6 之间的随机数。

这不是错误吗?根据我的理解,您不能使用 % 5 得到 5 的余数,因此该行只会生成从 1 到 5 的数字。我是一个绝对的初学者,所以我不知道我是犯了错误还是书岛有人可以确认吗?

是的,5 % 5 == 0,所以你只能从完整的表达式中得到数字 1 到 5。该方法的另一个问题是rand()可能returns从0到2n-1的数字,所以不同值的总数只能平分到其他一些二的权力。 因此,即使假设 rand() 本身在其输出范围内给出均匀分布的值,模数也不会给出结果数字的均匀分布。