如何在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
我不知道为什么......
答案 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)
作为您的抵消。