是否因为溢出? 但根据我的理解,Math.random()给出的数字小于1,结果应该小于0xFFFFFFFF。
答案 0 :(得分: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)
甚至更好
{{1}}
答案 1 :(得分:3)
0xFFFFFFFF
是-1
。因此,您将-1
与0.0
和1.0
之间的值相乘(1.0
不包括在内)(根据Math.random()
的java文档)。乘法将导致-1.0
(不包括)和0.0
之间的值。当您将其转换为int
时,最终会得到0
,因为小数值会丢失。
答案 2 :(得分:1)
0xFFFFFFFF = -1
Math.random() takes a value from [0, 1] interval
您将小于1
的数字乘以-1
。结果是相同的数字,但带有负号。将其投放到int
将丢弃小数部分,并留下0
。
答案 3 :(得分:-1)
Math.Random以0.0到1.0的形式返回一个double。因此,如果将其转换为int,则将具有0. 0 * number = 0