在 Random.java 中,x&((1L<<48)-1)==x 不是吗?
in Random.java, isn't 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)-1
是1111111111111111111111111111111111111111111111111111111111111111
。和数字一起做有什么作用吗?这是签名多头的怪癖吗?这是旧的过时代码吗?
不是64个:
1111111111111111111111111111111111111111111111111111111111111111
是48个:
0000000000000000111111111111111111111111111111111111111111111111
与此数字进行与运算会清除最左边的 16 位。
参见 http://developer.classpath.org/doc/java/util/Random-source.html 中的 int next(int bits)
。它包含行
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
号码(1L<<48)-1
是1111111111111111111111111111111111111111111111111111111111111111
。和数字一起做有什么作用吗?这是签名多头的怪癖吗?这是旧的过时代码吗?
不是64个:
1111111111111111111111111111111111111111111111111111111111111111
是48个:
0000000000000000111111111111111111111111111111111111111111111111
与此数字进行与运算会清除最左边的 16 位。