我想要创建一个线性同余随机数生成器,我想选择,比如说64位长度十六进制值的前16位。我怎么能在java中这样做?我已经根据一天中的时间创建了(非常)基本生成的数字。
我的公式:
seed = 0x5D588B656C078965L * cal.get(Calendar.HOUR_OF_DAY)+ 0x0000000000269EC3;
我只想选择前16位,我试着想一下如何用整数做这个,但我不认为我可以在这里应用相同的概念。谢谢!
答案 0 :(得分:0)
如果你想要一个在其他位置有前16位和0的长,你可以使用位掩码或移位。
假设“前16位”是指最高位,那么掩码看起来像这样:
long mask = 0xffff000000000000;
这样你想要保留的每个位位置都是'1',而其他位置则是0。然后用你的原始整数做一个逻辑“和”:
long result = seed & mask;
另一种方法是将原始位置移至右侧48位,然后再将48位移位。
答案 1 :(得分:0)
位移:
long value = seed >>> 48;
或者您可以将其保存在int
:
int value = (int)(seed >> 48);
通常,您将使用种子的 last 位来生成随机数,这使得单向mod
操作(即“更随机”),因此:
seed & 0xFFFF