理解这个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 (它将用一个种子预先设置),然后用下一个随机值覆盖它?

编辑 :谢谢,所以我对静态变量的理解已被纠正。 我是否正确地说xy最初设置为种子(在上面的代码中都是1 ),然后修改为随后的随机值? 而t是一个临时变量?


变量xy在你所暗示的意义上并不是真正的“本地”功能。 它们被声明为static ,这意味着它们的作用域是函数的本地对象(它们不能通过外部名称访问),它们的生命周期是整个程序的生命周期。 所以他们会保留他们之间的价值观,这意味着两件事情:

  • x和y实际上是PRNG状态。
  • 该函数不是线程安全的。
  • 链接地址: http://www.djcxy.com/p/37271.html

    上一篇: Understanding this 16

    下一篇: Finding seeds for a 5 byte PRNG