4

between 0 and 2^32-1Javaで乱数を生成する方法は?私はこれにリンクを書きます:

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

どうしてか分かりません..

4

2 に答える 2

8

0から2^32-1が必要な場合は、Random.nextLong() & 0xffffffffLの代わりにを使用する必要がありRandom.nextInt()ます。

Javaはunsigned型をサポートしていません。つまり、int必要な範囲の値を取得することはできません。これを回避するには、 long64ビットで必要な範囲の値を取得できるaを使用します。

于 2012-10-07T11:21:35.853 に答える
4

あなたの問題は、負の数を避けるためにオフセットを追加しようとするところです。

(long)(1<<31)

1をintとして解釈し、31ビットシフトして最大の負のintにし、次にlong(まだ負)にキャストします。

あなたが欲しい

(1L << 31)

あなたのオフセットとして。

于 2012-10-07T11:25:56.030 に答える