在java

时间:2017-02-12 16:17:34

标签: java random hex

我想要创建一个线性同余随机数生成器,我想选择,比如说64位长度十六进制值的前16位。我怎么能在java中这样做?我已经根据一天中的时间创建了(非常)基本生成的数字。

我的公式:

seed = 0x5D588B656C078965L * cal.get(Calendar.HOUR_OF_DAY)+ 0x0000000000269EC3;

我只想选择前16位,我试着想一下如何用整数做这个,但我不认为我可以在这里应用相同的概念。谢谢!

2 个答案:

答案 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