JavaScript:如何解释 `Math.floor(Math.random)` 方法的变体?

标签 javascript math random integer

似乎 Math.random()*3|0 等于 Math.floor(Math.random() * 3),这是我的版本我熟悉。虽然我可以毫无问题地理解后者如何生成整数 0、1 和 2 的逐步过程,但前者的结构却难倒了我。它很可能是更迂回的 Math.floor 方法的惯用变体。

是否可以用 x|y 样式表达以下两段代码并产生相同的结果?如果是这样,你能分解一下它是如何工作的吗?

<小时/>
1 + Math.floor(Math.random() * 100) // yielding 1-100 (inclusive)

190 + Math.floor(Math.random() * 66) // yielding 190-255 (inclusive)

最佳答案

|是 JavaScript 中的按位或运算符。 按位或运算符在每个位位置返回 1,其中任一操作数或两个操作数的相应位均为 1。 x| 0 是 x,对于任何 x

按位运算符仅适用于整数,因此 javascript 将 float 转换为整数。 因此 1.5 | 0 变成 1。

你的表达式可以重写为

1 + (Math.random() * 100 | 0)

190 + (Math.random() * 66 | 0)

关于JavaScript:如何解释 `Math.floor(Math.random)` 方法的变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34336488/

相关文章:

javascript - JSHint 链接方法调用

javascript - 将 Doc 属性作为参数传递给 Mongodb 上的函数

javascript - 如何刷新jquery对话框以供下次使用?

c - C 如何计算 sin() 和其他数学函数?

python - 如何计算python中矩阵的平衡?

javascript - 如何从函数中删除 jquery 过滤器

c# - 如何使用HashSet作为数学集合?

c - 播种 srand() 的最佳方法是什么?

c - 从 C 中的列表中选择一个随机节点

php - 使用php和sql session 的在线测验系统