理解按位操作符(~、^、&、|)

1. 按位与:a & b
2. 按位或:a | b
3. 按位异或: a ^ b
4. 按位非: ~ a

看到一道题:

假设有如下代码,那么a(10)的返回结果是?( )
function a(a)
{
a^=(1<<4)-1;
return a;
}

左移符可去看上一篇

先一步步解析题:

  1. a^=16-1; => a^15
  2. a=10^15

^是什么?

对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0。

异或运算符,如何运算呢?
首先把10和15转为二进制:

100000 1 0 1 0
         ↓ ↓ ↓ ↓					
150000 1 1 1 1
结果:    0 1 0 1

再举一个例子:
console.log(79^15);//64
7901 0 0 1 1 1 1
     ↓ ↓ ↓ ↓ ↓ ↓ ↓ 
1500 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
100000 1 0 1 0
         ↓ ↓ ↓ ↓
90000 1 0 0 1
80000 1 0 0 0

|运算符:

对于每一个比特位,当两个操作数相应的比特位至少有一个1时,结果为1,否则为0。

|运算符,两个操作位有一个1时结果就为1

console.log(10|9);//11
100000 1 0 1 0
         ↓ ↓ ↓ ↓
90000 1 0 0 1
110000 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反之
发布了31 篇原创文章 · 获赞 45 · 访问量 5886

猜你喜欢

转载自blog.csdn.net/weixin_43623808/article/details/103479096