具有两个不同结果的Rand函数 我的问题是C++中的RAND函数 请检查此项,为什么会产生不同的结果: int a = 2 * rand()%5; // result = 0 int a = 2 * ( rand()%5 ); // result = 6

具有两个不同结果的Rand函数 我的问题是C++中的RAND函数 请检查此项,为什么会产生不同的结果: int a = 2 * rand()%5; // result = 0 int a = 2 * ( rand()%5 ); // result = 6,c++,random,qt-creator,C++,Random,Qt Creator,第一 二号 尽管您更希望在第二次迭代中rand()返回不同数字的概率是1-1/(1+rand_MAX),但第一个表达式被分组为 这与第二组不同。例如,您可以看到第二个表达式的值总是偶数 *和%具有相同的优先级,因此关联性开始发挥作用,这对于两个运算符都是从左到右的。尽管您更希望rand()在第二次迭代中返回不同数字的概率是1-1/(1+rand_MAX),但是,第一个表达式分组为 这与第二组不同。例如,您可以看到第二个表达式的值总是偶数 *和%具有相同的优先级,因此关联性发挥作用,这对于两个运

第一

二号

尽管您更希望在第二次迭代中
rand()
返回不同数字的概率是
1-1/(1+rand_MAX)
,但第一个表达式被分组为

这与第二组不同。例如,您可以看到第二个表达式的值总是偶数


*
%
具有相同的优先级,因此关联性开始发挥作用,这对于两个运算符都是从左到右的。

尽管您更希望
rand()
在第二次迭代中返回不同数字的概率是
1-1/(1+rand_MAX)
,但是,第一个表达式分组为

这与第二组不同。例如,您可以看到第二个表达式的值总是偶数


*
%
具有相同的优先级,因此关联性发挥作用,这对于两个运算符都是从左到右。

因为这正是
rand()
的真正目的。如参考文件所述:

返回介于
0
和之间的伪随机整数
RAND_MAX

你希望它产生不同的结果,否则它将是一个无用的PRNG

加上第一个表达式先相乘,然后是模。而第二个则相反

要获得相同的值,必须固定运算符优先级,然后在调用
rand()
之前使用相同的种子调用
srand
两次



请注意,现在应该使用
标题,而不是
rand()

,因为这正是
rand()
的真正目的。如参考文件所述:

返回介于
0
和之间的伪随机整数
RAND_MAX

你希望它产生不同的结果,否则它将是一个无用的PRNG

加上第一个表达式先相乘,然后是模。而第二个则相反

要获得相同的值,必须固定运算符优先级,然后在调用
rand()
之前使用相同的种子调用
srand
两次



请注意,您现在应该使用
标题,而不是
rand()

,因此您会问为什么
rand()
函数每次执行/调用时都返回随机数?这就是它的目的:操作符优先级也是如此
2*rand()%5
(2*rand())%5
相同。非常感谢……@ralismark——这不是优先级,而是分组<代码>*和
%
具有相同的优先级。它们从左到右分组,这就是为什么您的备用版本是正确的。所以您会问为什么
rand()
函数每次执行/调用时都返回随机数?这就是它的目的:操作符优先级也是如此
2*rand()%5
(2*rand())%5
相同。非常感谢……@ralismark——这不是优先级,而是分组<代码>*和
%
具有相同的优先级。它们从左到右分组,这就是为什么您的备选版本是正确的。
(2 * rand()) % 5