为什么bitwiseOR([2,0,0,1]
)在以下情况下应该|
时返回1410065407
- 考虑到javascript == a && b
精度是否准确到15个数字?
int

答案 0 :(得分:5)
[...]考虑到javascript int precision精确到15个数字
不是数字,而是32 位。
值9,999,999,999高于完整的32位范围,即4,294,967,296(或2 ^ 32),所以会发生的事情是你正在转换" (钳位)数字为32位,任何按位运算都会发生这种情况:
@channel = current_user.channels.build(channel_params)

所以会发生的事情是1)数字被限制在32位范围内,即在这种情况下为1,410,065,407:
console.log(9999999999>>0);
console.log(9999999999&0xffffffff);
console.log(9999999999<<0);
console.log(9999999999|9999999999);
// etc.
然后2)或者在一起,这将产生相同的结果,因为两个数字首先被钳制。
在第二个例子中,数字999,999,999完全在32位范围内,因此无需钳位即可完成。