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

时间:2018-08-29 22:47:01

标签: c++ visual-studio windows-10

这不起作用:

test(testName, async (t) => {
  const ua = await getUA()

  await t.takeScreenshot(
    fixtureName +
      "/" +
      testName +
      "/" +
      identifyUserAgent(ua) +
      "/" +
      "scsh_1.png",
  )
...

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:4)

您的代码中几乎没有错误。

  1. 您应该将random_device的创建和mt19937的种子移到for循环之外。对于uniform_real_distribution<int>
  2. ,我也建议这样做
  3. mt19937接受不是random_device的种子的构造函数值,因此您必须调用它来获取种子(rd()
  4. 如果要生成整数,则应使用uniform_int_distribution<int>
  5. 如果您打算将数字生成为0x7FFFFFFF,则应明确地放置此数字,但如果要使数字达到最大int值,我建议使用更多的C ++样式std::numeric_limits<int>::max()

这是工作示例:

#include <cstdio>
#include <random>
#include <limits>
using namespace std;

int main(){
  random_device rd;
  mt19937 gen(rd());
  uniform_int_distribution<int> dis(0, std::numeric_limits<int>::max());
  for (int p = 0; p < 10; p++) {
    printf("%i\n", dis(gen));
  }
  return 0;
}