bitwiseOR不返回正确的值

时间:2017-12-20 07:03:24

标签: javascript bit-manipulation

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



int




1 个答案:

答案 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位范围内,因此无需钳位即可完成。