我發現this algorithm爲16位PRNG。我不明白x,y和t是什麼。我想要做的是使用一個16位的種子來生成多個隨機的16位值。瞭解這16位PRNG
如果我是正確的,該網頁(下面引用)中顯示的函數只是僞代碼,因爲就目前而言,它將始終生成相同的值,因爲x和y是函數的局部變量?
uint16_t rnd_xorshift_32() {
static uint16_t x=1,y=1;
uint16_t t=(x^(x<<5));
x=y;
return y=(y^(y>>1))^(t^(t>>3));
}
如何可以在上面進行修改,以讀取一個全局變量uint_16_t random
(將已預先設定了種子),然後用一個隨機值覆蓋它嗎?
編輯:謝謝,所以我對靜態變量的理解已被糾正。我是否正確地說x
和y
最初被設置爲種子(在上面的代碼中都是1
),然後被修改爲隨後的隨機值?而t
是一個臨時變量?
它們是靜態的。呼叫之間的值保持不變。靜態聲明也只用了一次,所以它從1開始,不再執行,並保留在內存中用於下一次調用。 –
它們是局部變量,但它們沒有自動存儲持續時間 - 「static」表示「x」和「y」始終指向相同的變量實例,它們在函數調用之間持續存在。 – 2013-08-03 12:41:54
C [程序中「靜態」的意思是什麼?](http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program) – 2013-08-03 12:42:57