ID:嵌入式情報局
作者:情報小哥
隨機數的產生非常的有用,最直接的感受就是讓顯示的數據產生跳動,從而讓用戶感覺真實可靠,同樣在密碼學中隨機數也是非常重要等等,這裡今天小哥就介紹兩種產生隨機數的辦法。「rand()」函數是系統庫文件提供的產生隨機數的函數,它從一個隨機數的序列中按著順序返回一個從0到最大隨機數 RAND_MAX的任意整數,當然最大隨機數的大小通常是固定的一個整數,所以每次程序運行從調用開始的序列都是一樣的 , 這樣也是為了便於程式設計師調試相應的程序。
下面來看一下rand函數的使用 :
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int rand_number()
{
return rand();
}
int main()
{
int array[4] = {1,2,3,4};
for(int i = 0; i < 4;i++)
{
int t = rand_number()%4;
cout << array[t]<<',';
}
}
得到如下運行結果 :
同樣上面的程序我們再進行重新運行,得到的仍然是同樣的結果。所以為了解決每次重頭開始運行其隨機數一樣的問題,「rand()」 函 數 需 要 與 另 一 個 函 數「srand()」 配 合 使 用。「srand()」函數的功能是給定一個種子,種子的用途是產生一個確定的隨機數序列,如果種子不變,產生的隨機數序列也是固定的,種子變化,產生的隨機數序列隨之變化。那麼最簡單的即使採用時間作為種子,可是使用「time(NULL)」作為種子,於是time產生的種子每秒鐘變化一次,如果程序兩次運行的時間間隔超過 1s的事件,那麼使用rand函數產生的隨機數序列就會發生變化的。#include <iostream>
#include <string>
#include <ctime>
#include <stdlib.h>
using namespace std;
int rand_number()
{
return rand();
}
int main()
{
int array[4] = {1,2,3,4};
srand(time(NULL));
for(int i = 0; i < 4;i++)
{
int t = rand_number()%4;
cout << array[t]<<',';
}
}
#include <iostream>
#include <string>
#include <ctime>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int rand_number()
{
SYSTEMTIME sys;
GetLocalTime(&sys);
return sys.wMilliseconds;
}
int main()
{
int array[10] = {1,2,3,4,5,6,7,8,9,0};
srand(time(NULL));
for(int i = 0; i < 10;i++)
{
int t = rand_number()%10;
cout << array[t]<<',';
long cnt = 1000000;
while(cnt--);
}
}
這裡生成了兩次隨機數如下:
這裡小哥就分享了一下C++中產生隨機數的兩種辦法,對於嵌入式C也可以類似的方法使用, 希望本文能夠對你有幫助!