是因为溢出吗?但据我了解,Math.random() 给出的数字小于 1,结果应该小于 0xFFFFFFFF。
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 回答