【发布时间】:2014-04-04 04:05:35
【问题描述】:
我的理解是 RAND_MAX 取决于机器的架构。如果机器是 32 位的,那么 rand() 只会生成最多 4 字节的东西。如何在 64 位机器上使用 rand() 生成 32 位随机整数?
另外,如果我以后想用 rand() 生成数十亿个随机整数,是否总是需要 srand()?
【问题讨论】:
-
把它扔掉...
(uint32)rand() -
使用 c++11 有一个完整的
标头,里面装满了好东西:en.cppreference.com/w/cpp/header/random -
您可能只需调用 rand 两次,然后将结果组合成一个 32 位 int,例如:(rand() ^ (rand()
-
RAND_MAX取决于 库实现,而不是机器架构,唯一的保证是它至少为 32767。据我所知,在 GNU 库中它是 2147483647在 Visual C++ 中是 32767。我强烈建议您查看 C++11<random>库而不是rand()。 -
和 0xFFFFFFFF 的 64 位 rand 绝对是个好主意。如果我不知道操作系统是否是 32 中的 64 并且仍想生成具有 N 字节长度(N