Math.random和算术移位

时间:2013-03-26 05:42:16

标签: javascript bit-shift

如果我在JavaScript中有以下代码:

var index1 = (Math.random() * 6) >> 0;
var index2 = Math.floor(Math.random() * 6);

index1index2的结果位于06之间。

我必须对我对>>运算符的理解感到困惑。我认为,使用arithmetic shift时,index1的结果将介于16之间。

我注意到,如果我使用Math.floor()运算符,我不需要Math.round()index1使用>>

我知道我可以通过向两个索引添加1来实现这一目标,但我希望有更好的方法可以确保结果从16,而不是添加{{ 1}}。

我知道bitwise operators将它们的操作数视为32位(零和1)的序列,而不是十进制,十六进制或八进制数。例如,十进制数字9的二进制表示为1001.按位运算符在此类二进制表示上执行操作,但它们返回标准JavaScript数值。

更新

我在第26行上看到了此CAAT tutorial中的原始用法,并想知道这是否会实际返回11之间的随机数它似乎只会在60之间返回一个随机数。所以你永远不会真正看到6鱼的形象!

提前感谢任何启示。

1 个答案:

答案 0 :(得分:1)

维基百科说'(负数的算术右移将等同于使用一些历史计算机使用的有符号数的补码表示中的0舍入为零的划分。)'

不完全是答案,但想法是>> 0非常具体,一般不应用于获得1到6之间的范围。

大多数人会告诉你做

 Math.floor((Math.random()*10)+1);