【发布时间】:2013-03-26 05:42:16
【问题描述】:
如果我在 JavaScript 中有以下代码:
var index1 = (Math.random() * 6) >> 0;
var index2 = Math.floor(Math.random() * 6);
index1 或 index2 的结果介于 0 和 6 之间。
我一定对我对>> 运算符的理解感到困惑。我认为通过使用arithmetic shift,index1 的结果将介于1 和6 之间。
我注意到,但是如果我使用 >> 运算符,我不需要将 Math.floor() 或 Math.round() 用于 index1。
我知道我可以通过将1 添加到两个索引来实现这一点,但我希望有更好的方法来确保结果从1 到6 而不是添加1。
我知道bitwise operators 将其操作数视为 32 位(零和一)的序列,而不是十进制、十六进制或八进制数。例如,十进制数字 9 的二进制表示为 1001。按位运算符在这种二进制表示上执行操作,但它们返回标准的 JavaScript 数值。
更新:
我在第 26 行看到了这个 CAAT tutorial 的原始用法,我想知道这是否真的会返回一个介于 1 和 6 之间的随机数,而且它似乎只会永远返回0 和6 之间的随机数。所以你永远不会真正看到anim1.pngfish 图像!
提前感谢您的任何启发。
【问题讨论】:
-
您不应该在 javascript 中使用位运算符。数字被实现为 64 个浮点数,并在内部转换为 32 位整数以进行操作,然后再返回。 i-programmer.info/programming/javascript/…
-
@Walkerneo 感谢您的链接。我会好好阅读的。
-
请注意,The Signed Right Shift Operator 算法的第 5 步使用内部 ToInt32 方法将值转换为整数。
-
@Walkerneo — 这有点笼统。在这种情况下,也许 OP 没有明智地使用它,但是按位运算符有它们的用途。
-
@RobG,嗯,来自 Skeetman 本人:stackoverflow.com/a/261073/828584。编辑:如果你遇到过它们,仍然对任何其他用途感兴趣。
标签: javascript bit-shift