检查一些代码,我发现了以下随机整数生成器函数:
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
的整数,并检查值或将其默认值分配给min
和max
,但我不明白它是如何返回的没有Math.floor()
方法的整数而不是浮点数。
是否使用0 | Math.random() * (max - min + 1) + min
表达式实现了?如果是这样,怎么样?
答案 0 :(得分:4)
结果转换为|
运算符的整数,即bitwise OR。从MDN开始,计算结果的第一步是:
操作数转换为32位整数,并由一系列位(零和1)表示。
由于您正在使用0进行OR运算,因此此操作不会更改结果的值(除了前面提到的转换之外)。
答案 1 :(得分:1)
0 |
是一种按位操作
它对值没有影响(ORing为零返回原始值),但是,像所有按位运算一样,它会截断为整数(按位运算对非整数没有意义)。