我正在构建一个用于散列目的的伪随机数生成器。我们需要使用某种算法。算法如下:
我的问题在于算法的第三步。屏蔽低阶n + 2位是什么意思?我在线阅读了很多内容,所以我有一些想法,但进一步的澄清会很棒!
答案 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个二进制数字之外的所有内容一样。