2016-09-21 101 views
1

为什么在JavaScript中:JavaScript和按位运算符

console.log('1000' | '1010'); // 1018不是'1010'?

console.log('1000' & '1010'); // 992不是 '1000'?

在JavaScript中按位计算的正确方法是什么?

+4

“什么北京时间为正道在JavaScript中按位计算?“使用数字,而不是字符串;) – kjaquier

+0

请注意,JavaScript中的按位操作异常缓慢,JS使用双精度数字类型,但32位整数意味着它必须进行转换,按位操作并每次转换*。 –

+0

@ kjaquier:不! - 与数字相同的结果! – jMike

回答

3

你必须定义输入的二进制数:

console.log(0b1000 | 0b1010); 
> 10 

然后您可以将十进制数转换为二进制记数法:

Number(10).toString(2); 
> "1010" 
+1

谢谢,也使用二进制数字和“二进制字符串”! – jMike

2

输入数字需要以二进制形式定义。操作后,由于按位运算产生十进制数,因此需要将结果再次转换为二进制。以下代码将生成您想要的输出。

console.log(('0b1000' | '0b1010').toString(2)); 
console.log(('0b1000' & '0b1010').toString(2)); 
+0

谢谢,这个作品! – jMike

2

它的使用你把十进制数的二进制数。你实际上得到

0000001111101000 | 0000001111110010 
0000001111101000 & 0000001111110010 

这相当于1018和992在小数

+0

谢谢,我现在明白了问题和结果。 – jMike