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

时间:2017-05-13 21:34:11

标签: c modulus

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

在" C编程:绝对初学者指南"中,有一行:

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

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

这不是一个错误吗?根据我的理解,你不能使用% 5获得5的剩余部分,这样该行只能生成1到5的数字。我是一个绝对的初学者,所以我无法判断我是否已经使用{0}。我犯了错误或书是。有人可以证实吗?

1 个答案:

答案 0 :(得分:0)

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