为何Math.random()与按位或(|)运算结合会返回整数?
为什么按位或(|)运算会让小数自动变成整数?
这是因为JavaScript的所有按位运算都会先将操作数转换为32位有符号整数,这个转换过程会直接截断数值的小数部分,自然就得到了整数结果,不需要额外调用Math.floor()这类方法。
具体拆解你的示例:
- 当你执行
Math.random() * 10时,得到的是0到10之间的浮点数(比如6.452)。 - 执行按位或运算
6.452 | 20时,JS会先对两个操作数做隐式转换:- 把浮点数
6.452截断小数部分,转为整数6; - 整数
20保持不变;
- 把浮点数
- 再对这两个整数执行按位或运算:
6 | 20的二进制运算结果是26(二进制0110 | 10100 = 11010),最终返回整数。
补充验证例子:
3.9 | 0→ 结果是3(直接截断小数部分)-4.2 | 0→ 结果是-4(注意:负数是向0取整,和Math.floor(-4.2)得到-5的行为不同)
内容的提问来源于stack exchange,提问作者kchui
相关产品推荐
相关产品推荐

