2012-10-07 97 views
4

如何在java中生成隨機數between 0 and 2^32-1? 我寫此鏈接:如何在java中生成0和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

[非常大數字在Java中不使用java.math.BigInteger]的可能重複(http://stackoverflow.com/questions/5318068/very-large-numbers-in-java-without-using-java-math -biginteger) –

回答

4

您的問題是您嘗試添加偏移以避免負數的位置。

(long)(1<<31) 

解釋1爲int,它移動31位,這使得它最大的負INT,然後將其它澆鑄於長(仍然爲負)。

你想

(1L << 31) 

爲您所抵消。

+0

它的作品非常感謝你! – jianzaixian

7

如果從0到2^32-1想要的,那麼你應該使用Random.nextLong() & 0xffffffffL而不是Random.nextInt()

Java不支持unsigned類型,這意味着您的int無法取得您想要的值。爲了解決這個問題,你使用一個64位的long,並且可以在需要的範圍內取值。

+0

'random.nextLong()&0xffffffffL'如何得到一個隨機的'long'? – CodyBugstein

相關問題