java随机数的产生原理?

2025-02-24 07:45:01
推荐回答(2个)
回答1:

一般来说都是伪随机数,就是用你运行的时间作为输入,然后通过求余等运算计算出来的
答案补充
求余也是一种哈希函数,不过哈希函数需要解决冲突。伪随机数不一定要吧。我就遇到第二天运行和第一天运行出现同样结果的情况。

回答2:

1. 如果没有设种子seed,则自动选择当前的系统时间毫秒作为种子,种子为48bits
public Random() { this(System.currentTimeMillis()); }

2. 如果自己设置了种子,用如下公式计算:
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);

3. 计算时,使用如下公式:
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));

4. 需要int就将上面的bits设为32

另外还有其他一些数据类型,请看javadoc

5. 如果是long就先算出32,然后左移32位,再加上新算的一个32bits的数

6. 如果是boolean,bits设为1