微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Random.java 中,不是 x&((1L<<48)-1)==x 吗?

如何解决在 Random.java 中,不是 x&((1L<<48)-1)==x 吗?

参见 http://developer.classpath.org/doc/java/util/Random-source.html 中的 int next(int bits)。它包含该行

seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);

数字 (1L<<48)-11111111111111111111111111111111111111111111111111111111111111111。用数字和它做任何事情吗?这是签名多头的怪癖吗?这是旧的过时代码吗?

解决方法

不是 64 个:

1111111111111111111111111111111111111111111111111111111111111111

是 48 个:

0000000000000000111111111111111111111111111111111111111111111111

与这个数字进行 AND 运算会清除最左边的 16 位。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。