随机整数函数的差异

Random integer functions differences

本文关键字:函数 整数 随机      更新时间:2023-09-26

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

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表达式实现?如果是,如何?

使用|运算符将结果转换为整数,该运算符是按位OR。根据MDN,计算结果的第一步是:

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

因为您使用0进行"或"运算,所以此运算不会更改结果的值(除了前面提到的转换)。

0 |是一个逐位操作
它对值没有影响(与零进行"或"运算会返回原始值),但与所有按位运算一样,它会截断为整数(按位运算对非整数没有意义)。