C++ 如何生成0到0x7FFFFFFF的随机整数?

C++ 如何生成0到0x7FFFFFFF的随机整数?,c++,visual-studio,windows-10,C++,Visual Studio,Windows 10,这不起作用: for (int p = 0; p < 10; p++) { random_device rd; mt19937 gen(rd); uniform_real_distribution<int> dis(0, INT_MAX); printf("%i\n", dis(gen)); } for(int p=0;p如果你想把数字生成到0x7FFFFFF,你应该明确地把这个数字放进去,但是如果你想把数字取到max int 值,我建议使用

这不起作用:

for (int p = 0; p < 10; p++) {
    random_device rd;
    mt19937 gen(rd);
    uniform_real_distribution<int> dis(0, INT_MAX);
    printf("%i\n", dis(gen));
}
for(int p=0;p<10;p++){
随机器件rd;
mt19937 gen(rd);
均匀实分布dis(0,INT_MAX);
printf(“%i\n”,dis(gen));
}

任何建议都将不胜感激。

您的代码中几乎没有错误

  • 您应该将
    random_设备的创建和播种
    mt19937
    移动到for循环之外。我还建议对
    uniform\u real\u分布使用相同的方法
  • mt19937
    接受seed not
    random\u device的构造函数值,因此您必须调用它来获取seed(
    rd()
  • 如果要生成整数,应使用
    统一整数分布
  • <> LI>如果你想把数字生成到0x7FFFFFF,你应该明确地把这个数字放进去,但是如果你想把数字取到max <代码> int <代码>值,我建议使用更多C++风格<代码> STD::MultuixLime::Max():/Calp> 下面是一个工作示例:

    #包括
    #包括
    #包括
    使用名称空间std;
    int main(){
    随机器件rd;
    mt19937 gen(rd());
    均匀分布图(0,标准::数值极限::max());
    对于(int p=0;p<10;p++){
    printf(“%i\n”,dis(gen));
    }
    返回0;
    }
    
    它不起作用,请您澄清一下好吗?它不编译,或者它运行但不做您想要的事情?你对10个整数的期望值是多少?不要在循环中为生成器重新设定种子。在循环中生成,将所有其他内容移出循环。并确保
    INT\u MAX
    为0x7FFFFFFF,否则您可能会遇到另一个有趣的惊喜。此外,对于整数
    uniform\u real\u distribution
    不是最佳选择<代码>统一内部分布是一个更好的选择。哦,当心。GCC的一些端口有非常糟糕的
    随机\u设备
    实现。@user4581301是的。在严密的监督下,即使是尊敬的山也非常感谢你的帮助。