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

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反之
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值