如何屏蔽伪随机数发生器的位

时间:2011-06-29 16:03:22

标签: python random

我正在构建一个用于散列目的的伪随机数生成器。我们需要使用某种算法。算法如下:

  • 每次调用Tabling例程时,将整数R初始化为等于1
  • 在每次连续调用随机数时,设置R = R * 5
  • 屏蔽除产品的低位n + 2位以外的所有位,并将结果放在R中 (2 ^ n是表格的大小)
  • 设置P = R / 4并返回

我的问题在于算法的第三步。屏蔽低阶n + 2位是什么意思?我在线阅读了很多内容,所以我有一些想法,但进一步的澄清会很棒!

1 个答案:

答案 0 :(得分:0)

这意味着您取模2 ^(2 + n)的数字。这是0 <= R&lt; 2 ^(2 + n),这意味着0 <= P <1。 2 ^ N。一种方法:

R %= 2 ** (2+n)

使用可能更有效的位移操作(请注意,掩码是常量,因此您只需要计算一次):

mask = (1 << 2+n) - 1
R &= mask

它被称为“屏蔽除了低位之外的所有位”的原因是如果你用二进制写R,它就像删除除最后2 + n个二进制数字之外的所有内容一样。