我找到了this algorithm的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
是一个临时变量?
答案 0 :(得分:3)
变量x
和y
在你暗示的意义上并不是真正的“本地”功能。它们被声明为static
,这意味着当它们的范围是函数的本地时(它们不能通过名称从外部访问),它们的生存期是整个计划。所以他们会在调用之间保留他们的值,这意味着两件事: