2013-07-03 2 views

답변

3

0xFFFFFFFF-1입니다. 따라서 에 0.01.0 사이의 값 (은 포함되지 않음)을 곱합니다 (java 문서의 Math.random()에 따라). 곱셈은 ​​-1.0 (포함하지 않음)과 0.0 사이의 값이됩니다. int으로 변환하면 십진수 값이 없어져 0이됩니다.

+0

실제 문제는 아닙니다. OP는 그가 무작위 수를 매우 큰 수로 곱한다고 생각하지만, 그렇지 않습니다. – jlordo

+0

파트 설명에 따라 편집이 계속됩니다. – JHS

+1

'(int) (Math.random() * 100)'도 항상 '0'이 될 것이라고 말하는가 ?? – jlordo

-1

Math.Random은 0.0에서> 1.0 사이의 형식으로 double을 반환합니다. 당신이 int로 있음을 캐스팅한다면, 당신은 할 것이다 0 0 * 수 = 당신은 -1와보다 작은 1 숫자를 곱한하는 0

+1

캐스트 이전에 곱셈이 발생했습니다. 피승수가 잘못되었습니다. '0'과'100' 사이의 임의의 숫자를 얻으려면'(int) (Math.random() * 100)'이라고 쓰면 ** '0'이되지 않습니다. – jlordo

1
0xFFFFFFFF = -1 
Math.random() takes a value from [0, 1] interval 

. 결과는 매우 같은 숫자이지만 음수 부호가 붙습니다. int으로 전송하면 소수 부분은 무시되고 0으로 남게됩니다.

4

0xFFFFFFFF의 2의 보수는 -1 십진수입니다. 01 사이의 숫자를 반환합니다. 이제 0.5이라고 가정합니다. 그렇다면 :

(int) (0.5 * -1) 이것은 으로 변환 할 때 인 (int)(-0.5)입니다. 당신이 가장 큰 양수를 사용하고자하는 가정

, 이것을 사용 :

(int) (Math.random() * 0x7FFFFFFF) 
         ^

또는

(int) (Math.random() * Integer.MAX_VALUE) 
+1

정답입니다. –

+0

수백만의 감사! 0x7FFFFFFF만큼 좋은 점은 signed int의 최대 값입니다. – Zoe