【问题标题】:how to generate random number between 0 and 2^32-1 in java如何在java中生成0到2^32-1之间的随机数
【发布时间】:2012-09-27 21:55:57
【问题描述】:

如何在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

我不知道为什么..

【问题讨论】:

标签: java random unsigned


【解决方案1】:

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

Java 不支持 unsigned 类型,这意味着您的 int 不能在您想要的范围内取值。为了解决这个问题,您可以使用 long,它是 64 位的,可以取所需范围内的值。

【讨论】:

  • random.nextLong() &amp; 0xffffffffL 怎么给你一个随机的long
【解决方案2】:

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

(long)(1<<31)

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

你想要的

(1L << 31)

作为你的偏移量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多