一、按位与 &
0为false,1为true,同假为假,同真为真,一真一假即为假
console.log(3 & 5);//1
/*
3: 0011
5: 0101
------------------
0001
*/
二、按位或 |
0为false,1为true,同假为假,同真为真,一真一假则为真
console.log(3 | 5);//7
/*
3: 0011
5: 0101
----------------
0111
*/
三、按位异或 ^
相同为0,不同为1(相同为假,不同为真)
特点:一个数连续异或同一个数两次,结果等于他本身
应用:基础的加密算法
console.log(3 ^ 5);//6
console.log(3 ^ 5 ^ 5);//3
/*
3: 0011
5: 0101
----------------
0110-----6
5: 0101
----------------
0011-----3
*/
四、按位取反 ~
0为1,1为0(假为真,真为假)
计算公式:
~n = -(n+1)
console.log(~7);//-8
/*
7: 00000000 00000000 00000000 00000111
~ 11111111 11111111 11111111 11111000
第一位为符号位:1为负数 0为正数
*/
五、位移运算符
运算符:
>> 右运算
<< 左运算
>>> 无符号右移
计算公式:n<<m = n*(2的m次方) n>>m = n/(2的m次方)
注意:
1.本质上移动的是二进制,所以它相当于操作计算机底层的二级制,所以性能极高!
2.不存在无符号左移,因为高位可能是符号位
console.log(3 << 3);//24
/*
3: 00000011
<< 00011000------24
*/
//面试题:请您以性能最高的方式计算2的3次方
console.log(2 << 2)