首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >伪随机数发生器的澄清

伪随机数发生器的澄清
EN

Software Engineering用户
提问于 2011-07-06 04:53:51
回答 2查看 359关注 0票数 1

我被要求使用以下算法创建一个伪随机数生成器:

生成器将生成从1N-1的每一个整数,这正是N=2^n算法的一次。

  • 每次调用表例程时,将整数R初始化为等于1,然后在每次连续调用随机数时:
  • 设置R=R*5
  • 屏蔽除低阶n+2位外的所有产品,并将结果放入R中。
  • 设置p=R/4

当它说屏蔽除低阶n+2位外的所有产品时,该算法意味着什么?

EN

回答 2

Software Engineering用户

发布于 2011-07-06 05:00:26

对于n=1,你会掩蔽最少的3位

假设大端你有这个位布局

代码语言:javascript
复制
128 64  32  16  8   4   2   1
X   X   X   X   X   O   O   O

O是您想要保留的位元,您将使用值为7的位和运算符,因为您需要4、2和1位高来掩蔽(按位和)位。myProduct &= 0x07; // force all bits except the 3 least to be 0

票数 2
EN

Software Engineering用户

发布于 2011-07-07 04:18:52

下面是一个有用的示例,使用Python解释器帮助进行二进制转换

代码语言:javascript
复制
>>> bin(1234567)
'0b100101101011010000111'

假设n=4,那么除了最后的6位之外,我需要掩蔽所有的内容。哪个应该给

代码语言:javascript
复制
>>> n=4
>>> 0b000111
7

维基百科的二进制页面有一些关于按位操作的信息。在这里,我们对和操作感兴趣

代码语言:javascript
复制
>>> 1234567 & 0b111111
7

达到这个掩码的一种方法是计算一个更大的数字(因为它是2的幂),然后从它中减去一个。

代码语言:javascript
复制
>>> (1<<n+2)-1
63
>>> bin(63)
'0b111111'

(1<<n+2)-1可以简化为(4<<n)-1,但在本例中还有另一种方法

代码语言:javascript
复制
>>> 1234567 % (4<<n)
7

我将按位和(&)替换为模数(%),它具有掩蔽最低n+2比特的相同效果。

模数对CPU的工作量略大于按位运算,因此,如果需要最佳性能,则应使用按位方法。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/90710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档