理解这个16
我发现这个算法用于16位PRNG。 我不明白x,y和t是什么。 我想要做的是使用16位的种子来生成多个随机的16位值。
如果我是正确的,该网页(下面引用)中显示的函数只是伪代码,因为就目前而言,它将始终生成相同的值,因为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
是一个临时变量?
变量x
和y
在你所暗示的意义上并不是真正的“本地”功能。 它们被声明为static
,这意味着它们的作用域是函数的本地对象(它们不能通过外部名称访问),它们的生命周期是整个程序的生命周期。 所以他们会保留他们之间的价值观,这意味着两件事情: