在java中操作十六进制值

在java中操作十六进制值,java,random,hex,Java,Random,Hex,我想做一个线性全等随机数生成器,我想选择,比如说64位长度的十六进制值的前16位。我如何在java中做到这一点?我已经根据一天中的时间创建了一个非常基本的生成数字 我的公式是: seed=0x5D588B656C078965L*cal.getCalendar.HOUR_OF_DAY+0x0000000000269EC3 我只想选择其中的前16位,我试着思考如何使用整数,但我不认为我可以在这里应用相同的概念。谢谢 如果您想要一个长度为前16位且其他位置为零的长度,您可以使用位掩码或移位 假设前16

我想做一个线性全等随机数生成器,我想选择,比如说64位长度的十六进制值的前16位。我如何在java中做到这一点?我已经根据一天中的时间创建了一个非常基本的生成数字

我的公式是:

seed=0x5D588B656C078965L*cal.getCalendar.HOUR_OF_DAY+0x0000000000269EC3


我只想选择其中的前16位,我试着思考如何使用整数,但我不认为我可以在这里应用相同的概念。谢谢

如果您想要一个长度为前16位且其他位置为零的长度,您可以使用位掩码或移位

假设前16位是指最高阶位,则掩码如下所示:

long mask = 0xffff000000000000;
因此,每个要保留的位位置都有一个“1”,其他位置有一个0。然后对原始整数执行逻辑“与”:

long result = seed & mask;
另一种方法是将原稿向右移动48位,然后再向左移动48位

位移位:

long value = seed >>> 48;
也可以将其保存在int中:

通常,您会使用种子的最后一位生成随机数,这使得单向mod操作更加随机,因此:

seed & 0xFFFF

新随机数.next16;int-sixteenleastmagnitbits=int-longValue&0xFFFF;?太酷了!谢谢你,我以前听说过位屏蔽,但我才刚上大学一年级,所以我没有太多经验。我认为在位级别上计算会发生什么是有益的-对于掩码中的每个“1”,都会从原来的“1”或“0”变为“1”;对于掩码中的每个“0”,您将始终从“and”操作中获得一个0结果。您可以使用类似的逻辑设置值,使用“或”操作,在要设置位的位置使用“1”。请记住,在StackOverflow上,如果您的问题得到回答,请将其标记为答案;如果有任何答案对你有帮助,请投票表决。这就是维护声誉的方法。你认为我会因为这份声明而丢失任何数据吗?seed=int0x5D588B656C078965L*cal.getCalendar.HOUR_OF_DAY+0x0000000000269EC3;结果将丢失您屏蔽的所有位;如果你不放弃你的原创,你仍然会拥有它们。但是没有办法屏蔽位而不丢失数据。谢谢!我会投票,但我没有足够的声誉。实际上,你甚至不需要变量,你可以直接给我们种子
seed & 0xFFFF