如何在java中生成0到2 ^ 32-1之间的随机数

时间:2012-10-07 11:17:36

标签: java random unsigned

如何在java中生成随机数between 0 and 2^32-1? 我写这个链接:

long[]num = new long[size + 1];
Random random = new Random();
for (int i = 1; i < size + 1; i++) {
num[i] = (long)random.nextInt()+(long)(1<<31);
System.out.println(num[i]);
}

但打印

-1161730240
-1387884711
-3808952878
-3048911995
-2135413666

我不知道为什么......

2 个答案:

答案 0 :(得分:7)

如果你想要从0到2 ^ 32-1,那么你应该使用Random.nextLong() & 0xffffffffL而不是Random.nextInt()

Java不支持unsigned类型,这意味着您的int无法获取所需范围内的值。要解决这个问题,可以使用64位的long,并且可以获取所需范围内的值。

答案 1 :(得分:4)

您的问题是尝试添加偏移以避免负数。

(long)(1<<31)

将1解释为int,将其移位31位使其成为最大的负int,然后将其转换为long(仍为负数)。

你想要

(1L << 31)

作为您的抵消。