随机整数函数的差异

时间:2014-10-26 13:25:26

标签: javascript random

检查一些代码,我发现了以下随机整数生成器函数:

function randomInt(min, max) {
    return min ? min : min = 0,
        max ? max : max = 1,
        0 | Math.random() * (max - min + 1) + min
}

将其与MDN的等效函数进行比较:

// Returns a random integer between min (included) and max (excluded)
// Using Math.round() will give you a non-uniform distribution!
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}

我理解第一个创建并包含max的整数,并检查值或将其默认值分配给minmax,但我不明白它是如何返回的没有Math.floor()方法的整数而不是浮点数。

是否使用0 | Math.random() * (max - min + 1) + min表达式实现了?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:4)

结果转换为|运算符的整数,即bitwise OR。从MDN开始,计算结果的第一步是:

  

操作数转换为32位整数,并由一系列位(零和1)表示。

由于您正在使用0进行OR运算,因此此操作不会更改结果的值(除了前面提到的转换之外)。

答案 1 :(得分:1)

0 |是一种按位操作 它对值没有影响(ORing为零返回原始值),但是,像所有按位运算一样,它会截断为整数(按位运算对非整数没有意义)。