javascript - 数学随机和算术移位

标签 javascript bit-shift

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

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

index1index2 的结果介于 06 之间。

我一定对我对 >> 运算符的理解感到困惑。我认为通过使用 arithmetic shift index1 的结果将介于 16 之间。

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

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

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

更新:

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

提前感谢您的任何启发。

最佳答案

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

不完全是一个答案,但想法是 >> 0 确实是特定的,不应该一般用于获取 1 到 6 之间的范围。

大多数人会告诉你这样做

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

关于javascript - 数学随机和算术移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630141/

相关文章:

c - 高效地对 int 数组进行位移?

java ->> 在 Java 中做什么?

c++ - 左移位和丢弃位

javascript - 关于插入到 DOM 中的 Javascript 对象的说明?

javascript - 如何在 JavaScript 中创建 JSONArray 的子弹图?

javascript - 尝试使用 jQuery 更改语言

javascript - 使用 jQuery 从图像中删除包装 <a> anchor 标记

c++ - 首先将字符串移动最低有效位?

javascript - 打印时触发调整大小事件

assembly - 无需 DIV 操作码即可在汇编中将任何数字(16 位)除以 3 的更快方法