在Random.java中,isn';x&;((1L<;<;48)-1)=x?

在Random.java中,isn';x&;((1L<;<;48)-1)=x?,java,random,bitwise-and,Java,Random,Bitwise And,请参阅中的int next(int位)。它包含行 seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1); seed=(seed*0x5deec66dl+0xBL)和(1L它不是64个: 1111111111111111111111111111111111111111111111111111111111111111 有48个: 0000000000000000111111111111111111111111111111

请参阅中的
int next(int位)
。它包含行

seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
seed=(seed*0x5deec66dl+0xBL)和(1L它不是64个:

1111111111111111111111111111111111111111111111111111111111111111
有48个:

0000000000000000111111111111111111111111111111111111111111111111
使用此数字进行ANDing将清除最左边的16位。

它不是64位:

1111111111111111111111111111111111111111111111111111111111111111
有48个:

0000000000000000111111111111111111111111111111111111111111111111

与此数字相加将清除最左边的16位。

您是如何得到64位作为答案的?不是48位吗?它将数字屏蔽为48位。facepalm。掩盖为48位。谢谢!顺便说一句,如果您想要在整个64位
范围内随机数(没有您问题中看到的48位限制),使用类而不是。请参见。您是如何得到64个1作为答案的?不是48个吗?它将数字屏蔽为48位。facepalm。掩盖为48位。谢谢!顺便说一句,如果您想要在整个64位的
范围内随机数(没有您问题中看到的48位限制),请使用类而不是。请参见。