是因为溢出吗?但据我了解,Math.random() 给出的数字小于 1,结果应该小于 0xFFFFFFFF。
问问题
477 次
4 回答
4
0xFFFFFFFF
二进制补码是-1
十进制。
你是对的,Math.random()
返回一个介于0
和之间的数字1
。现在假设它是0.5
. 然后你有:
(int) (0.5 * -1)
这是(int)(-0.5)
什么0
时候投射到int
.
假设您想使用最大的正数,请使用:
(int) (Math.random() * 0x7FFFFFFF)
^
甚至更好
(int) (Math.random() * Integer.MAX_VALUE)
于 2013-07-03T13:27:40.050 回答
3
0xFFFFFFFF
是-1
。因此,您乘以-1
介于0.0
和1.0
(1.0
不包括) 之间的值(根据 java 文档Math.random()
)。乘法将导致-1.0
(不包括)和之间的值0.0
。当您将其转换为int
最终结果时, a0
因为十进制值丢失了。
于 2013-07-03T13:26:24.980 回答
1
0xFFFFFFFF = -1
Math.random() takes a value from [0, 1] interval
您正在将一个小于的数字1
与 a相乘-1
。结果是相同的数字,但带有负号。将其转换为int
将丢弃小数部分,剩下0
.
于 2013-07-03T13:27:34.063 回答
-1
Math.Random 返回 0.0 到 >1.0 形式的双精度数。因此,如果您将其转换为 int,您将拥有 0. 0 * number = 0
于 2013-07-03T13:27:12.483 回答