1

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

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

index1或的结果index2介于0和之间6

我一定对我对>>运营商的理解感到困惑。我认为通过使用算术移位,结果index1将介于1和之间6

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

我知道我可以通过添加1两个索引来实现这一点,但我希望有一种更好的方法来确保结果是 from 1to6而不是添加1.

我知道按位运算符将其操作数视为 32 位(零和一)的序列,而不是十进制、十六进制或八进制数。例如,十进制数字 9 的二进制表示为 1001。按位运算符对这种二进制表示执行操作,但它们返回标准的 JavaScript 数值。

更新:

我在第 26 行看到了这个 CAAT教程中的原始用法,我想知道这是否真的会返回一个介于and之间的随机数,而且它似乎只会返回一个介于and之间的随机数。所以你永远不会真正看到鱼的图像!1606anim1.png

提前感谢您的任何启发。

4

1 回答 1

1

维基百科说“(负数的算术右移相当于在一些历史计算机使用的有符号数的补码表示中使用向 0 舍入的除法。)”

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

大多数人会告诉你做

 Math.floor((Math.random()*10)+1);
于 2013-03-26T05:59:44.823 回答