1. 按位与:a & b
2. 按位或:a | b
3. 按位异或: a ^ b
4. 按位非: ~ a
看到一道题:
假设有如下代码,那么a(10)的返回结果是?( )
function a(a)
{
a^=(1<<4)-1;
return a;
}
左移符可去看上一篇
先一步步解析题:
- a^=16-1; => a^15
- a=10^15
^是什么?
对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0。
异或运算符,如何运算呢?
首先把10和15转为二进制:
10:0000 1 0 1 0
↓ ↓ ↓ ↓
15:0000 1 1 1 1
结果: 0 1 0 1
再举一个例子:
console.log(79^15);//64
79:01 0 0 1 1 1 1
↓ ↓ ↓ ↓ ↓ ↓ ↓
15:00 0 0 1 1 1 1
结果:1 0 0 0 0 0 0 =>十进制64
在二进制中,同位相同为0,不同为1
结果:
00000101,js转换为十进制显示为5
&运算符:
对于每一个比特位,只有两个操作数相应的比特位都是1时,结果才为1,否则为0。
同位同为1,结果为1。有一个0结果都为0
console.log(10&9);//8
10:0000 1 0 1 0
↓ ↓ ↓ ↓
9: 0000 1 0 0 1
8: 0000 1 0 0 0
|运算符:
对于每一个比特位,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0。
|运算符,两个操作位有一个1时结果就为1
console.log(10|9);//11
10:0000 1 0 1 0
↓ ↓ ↓ ↓
9: 0000 1 0 0 1
11:0000 1 0 1 1
~运算符:
反转操作数的比特位,即0变成1,1变成0。
反转每一位,0变为1,1变为0,例:
console.log(~9);//-10
9二进制:0000 1001
每一位反转:1111 0110 =>-10
一般计算机为64位,举例8位,最高位为符号位代表正负 1为负0反之