Java UUID.randomUUID().GetLeastSignificanBits()是否总是返回负值?

Java UUID.randomUUID().GetLeastSignificanBits()是否总是返回负值?,java,uuid,Java,Uuid,我需要生成一个唯一的long值,因此我决定使用UUID: UUID.randomUUID().getLeastSignificantBits(); 我注意到一件奇怪的事情是UUID.randomuid().getLeastSignificantBits()总是返回负值。我很困惑。我错过什么了吗?: 版本4 UUID使用仅依赖随机数的方案。该算法设置版本号(4位)以及两个保留位。使用随机或伪随机数据源设置所有其他位(剩余122位) 版本4 UUID的格式为xxxxxxxx-xxxx-4xxx-y

我需要生成一个唯一的long值,因此我决定使用UUID:

UUID.randomUUID().getLeastSignificantBits();
我注意到一件奇怪的事情是
UUID.randomuid().getLeastSignificantBits()
总是返回负值。我很困惑。我错过什么了吗?

版本4 UUID使用仅依赖随机数的方案。该算法设置版本号(4位)以及两个保留位。使用随机或伪随机数据源设置所有其他位(剩余122位)

版本4 UUID的格式为xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxx,其中x是任何十六进制数字,y是8、9、A或B中的一个


因此,最低有效一半的第一位将始终为1,使其成为负数。

这对于演示从
getLeastSignificantBits()
中期望得到什么也很有用:


谢谢。这对我来说很有意义。顺便说一句,关于如何生成唯一的长值有什么建议吗?@Kai这是一个单独的问题(在本网站上也曾被问过)。SecureRandom#nextLong如何?
/**
 * @see UUID#getLeastSignificantBits()
 */
public void test_getLeastSignificantBits() {
    UUID uuid = new UUID(0, 0);
    assertEquals(0, uuid.getLeastSignificantBits());
    uuid = new UUID(0, Long.MIN_VALUE);
    assertEquals(Long.MIN_VALUE, uuid.getLeastSignificantBits());
    uuid = new UUID(0, Long.MAX_VALUE);
    assertEquals(Long.MAX_VALUE, uuid.getLeastSignificantBits());
}