为什么(int)(Math.random()* 0xFFFFFFFF)为0

时间:2013-07-03 13:24:27

标签: java binary overflow bit-manipulation

是否因为溢出? 但根据我的理解,Math.random()给出的数字小于1,结果应该小于0xFFFFFFFF。

4 个答案:

答案 0 :(得分:4)

两个补码中的

0xFFFFFFFF-1十进制。

您是对的,Math.random()会在01之间返回一个数字。现在假设它是0.5。然后你有:

(int) (0.5 * -1)(int)(-0.5)0int投放到(int) (Math.random() * 0x7FFFFFFF) ^

假设您要使用最大的正数,请使用:

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

甚至更好

{{1}}

答案 1 :(得分:3)

0xFFFFFFFF-1。因此,您将-10.01.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