2011-06-29 20 views
0

私は、ハッシュの目的で擬似乱数ジェネレータを構築しています。特定のアルゴリズムを使用する必要があります。アルゴリズムは以下の通りである:擬似乱数ジェネレータのビットをマスクする方法

  • 整数Rが1にテーブリングルーチンは乱数のための連続した各呼び出しで
  • 呼ばれるたびに、セットR = R * 5
  • マスク等しくなるように初期化すべてのより低い次数n製品の+ 2ビットとR に結果を配置(2^nはテーブルのサイズである)
  • セットP = R/4と

マイ発行嘘を返しますアルゴリズムの第3ステップ内で実行される。下位n + 2ビットをマスクするのはどういう意味ですか?私は多くのことをオンラインで読んでいますので、アイデアはいくつかありますが、それ以上の説明は素晴らしいでしょう!

答えて

0

これは、2 ^(2 + n)を法とする数をとることを意味します。これは、0 < = R < 2 ^(2 + n)であり、0 < = P < 2^nであることを意味する。これを行う1つの方法:

より効率的かもしれビットシフト演算、(そのマスクを注意一定であるので、あなたは一度だけ、それを計算する必要がある)を使用して
R %= 2 ** (2+n) 

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

なぜなら、「下位ビット以外のすべてをマスクする」と呼ばれる理由は、Rをバイナリで書くと、最後の2 + nバイナリ桁以外のすべてを削除することと同じです。

関連する問題