2012-10-07 2 views
4

자바에서 임의 번호 between 0 and 2^32-1을 생성하는 방법은 무엇입니까? 당신이해야 당신이 0 (32-1)^2에서 원하는 경우자바에서 0과 2 사이의 임의의 숫자를 생성하는 방법^32-1

-1161730240 
-1387884711 
-3808952878 
-3048911995 
-2135413666 

내가,

+0

가능한 복제본 [java.math.BigInteger를 사용하지 않고 Java의 매우 큰 숫자] (http://stackoverflow.com/questions/5318068/very-large-numbers-in-java-without-using-java-math) -biginteger) –

답변

4

음수를 피하기 위해 오프셋을 추가하려고하면 문제가 생깁니다.

(long)(1<<31) 

은 그것을 가장 부정적인 INT하게 31 비트 시프트 int로 1 해석 한 다음 그 긴 (여전히 마이너스)로 주조.

당신은 당신의 오프셋으로

(1L << 31) 

를 원한다.

+0

정말 고마워요! – jianzaixian

7

.. 왜 모르는

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]); 
} 

을하지만 인쇄 : 나는이 연결 쓰기 Random.nextInt() 대신 Random.nextLong() & 0xffffffffL을 사용하십시오.

Java는 unsigned 유형을 지원하지 않으므로, int은 원하는 범위에서 값을 사용할 수 없습니다. 이 문제를 해결하려면 long (64 비트)을 사용해야하며 필요한 범위의 값을 사용할 수 있습니다.

+0

'random.nextLong() & 0xffffffffL'은 임의의'long'을 어떻게 얻습니까? – CodyBugstein

관련 문제