如果我在 JavaScript 中有以下代码:
var index1 = (Math.random() * 6) >> 0;
var index2 = Math.floor(Math.random() * 6);
index1
或 index2
的结果介于 0
和 6
之间。
我一定对我对 >>
运算符的理解感到困惑。我认为通过使用 arithmetic shift index1
的结果将介于 1
和 6
之间。
我注意到,但是我不需要对 index1
使用 Math.floor()
或 Math.round()
如果我使用 >>
运算符。
我知道我可以通过向两个索引添加 1
来实现此目的,但我希望有更好的方法来确保结果从 1
到 6
而不是添加 1
。
我知道 bitwise operators将它们的操作数视为 32 位(零和一)的序列,而不是十进制、十六进制或八进制数。例如,十进制数字 9 的二进制表示形式为 1001。按位运算符对这种二进制表示形式执行运算,但它们返回标准 JavaScript 数值。
更新:
我在这个CAAT中看到了原始用法tutorial在第 26 行,想知道这是否真的会返回 1
和 6
之间的随机数,而且它似乎只会返回一个随机数介于 0
和 6
之间。所以你永远不会真正看到 anim1.png
鱼图像!
提前感谢您的任何启发。
最佳答案
维基百科说“(负数的算术右移相当于在一些历史计算机所使用的带符号数的补码表示中使用向 0 舍入的除法。)”
不完全是一个答案,但想法是 >> 0 确实是特定的,不应该一般用于获取 1 到 6 之间的范围。
大多数人会告诉你这样做
Math.floor((Math.random()*10)+1);
关于javascript - 数学随机和算术移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630141/