如何使用UUID生成唯一的正Long

萨拉·库玛(Saurabh Kumar):

我需要为数据库主键列生成唯一的Long ID。

我以为我可以使用UUID.randomUUID()。getMostSignificantBits(),但是有时它会产生一些负数,这对我来说也是个问题。

是否有可能仅从UUID生成正数长?会有数十亿个条目,因此我希望每个生成的键必须唯一。

Sasha Pechenyi:
UUID.randomUUID().getMostSignificantBits() & Long.MAX_VALUE

之所以起作用,是因为当您按位与1进行操作时,它允许按原样传递同一位数字;当您按位与0进行操作时,它将阻止该位,结果为0。现在,二进制中的Long.MAX_Value为

0111111111111111111111111111111111111111111111111111111111111111 

这是0,然后是63 1s(总共是64位,在Java中很长)

因此,当您按位&数字X与该数字相同时,您将得到相同的数字X,但最左边的位现在变为零。这意味着您仅更改了该数字的符号,而没有更改该值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章