我对以下代码有疑问:
#include <iostream> #include <ctime> int main(){ unsigned long int blob; srand(time(0)); for(int counter = 0; counter <= 100; counter++) { blob = rand() % 4000000000UL ; std::cout << blob << std::endl; }//for system("pause"); return 0; } //main
在codepad.org上,它输出大的值,如
378332591 1798482639 294846778 1727237195 62560192 1257661042
但在Windows 7 64位上,它只输出小值(在VS11& Code :: Blocks上进行了测试编译)
10989 13493 13169 18581 17972 29
在此先感谢帮助学习者;)
解决方法
rand()仅生成最多RAND_MAX的数字.
根据MSDN,在Windows上,RAND_MAX仅为32767,或(2 ** 15 – 1)(请注意,这是根据C标准允许的最小RAND_MAX(此处为link to open group base spec,基于C标准)).
如果你想要更大的数字,你需要多次调用它和比特移位,例如:
long long int my_big_random = rand() ^ (rand() << 15) ^ ((long long int) rand() << 30);