我们一般会使用如下方法获取随机数:
1.
#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<10;++i)
{
cout<<rand()<<endl;
}
return 0;
}
2.
srand(::GetTickCount());
int x=rand()%9+1; //获取1~9之间的随机数
但是这样的代码连续执行两次,那么在极短的时间内的出来的结果大多数会一样。由于::GetTickCount()返回值一样,所以得不到真正的随机数。
前面的随机数是伪随机,而不是真正的随机。
方法:
可以嵌入汇编语言的函数GetCpuCycle()来代替上面代码中的::GetTickCount(),由于GetCpuCycle()是获取CPU自加电以来的时间周期数,而CPU执行任意两条语句所花费的时间至少是1个CPU时钟周期。
Srand((unsigned int)GetCpuCycle());
int x=rand()%9+1;
/*
//获得Cpu自加电以来的时钟周期数
__declspec (naked) unsigned __int64 GetCpuCycle()
{
_asm
{
rdtsc
ret
}
}
*/