位操作符是用来对数据进行二进制运算时用到的操作符号,并且是二进制按位对应操作。
1.& 与操作符
c = a&b,只有当a和b都是1的时候,c才等于1,只要a和b其中有一个为0,c都等于0,为什么是这么算的呢?计算机是通过二进制来进行数据操作的,这种与操作脱胎于与门电路,如下图
从与门逻辑电路来看,只有两条输入的线路都是接通的,输入都是1,出来的线路才是通的,输出才是1。这也是为什么只有当a和b都是1,结果才是1。如果c = 5 & 1; 先将5转成二进制数101,101与1进行与操作,将1前面补0,补成001,这样将两个二进制树按位与,结果为001,也就是c=0。
2.| 或操作符
c = a | b;只要a和b有一个为1,结果为1,a和b都是0,c结果为零
从或门逻辑电路来看,只要两条输入的线路有一条接通的,输入都是1,出来的线路都是通的,输出是1,只有两个输入都是0,输出才为0。这也是为什么只有当a和b都是0,结果才是0。如果c = 5 | 1; 先将5转成二进制数101,101与1进行或操作,将1前面补0,补成001,这样将两个二进制树按位与,结果为101,也就是c=5。
3. ^ 异或操作(相同为0,相异为1)
c = a^b, 只有a和b不相同的时候,结果才为1,a和b相同时,结果为1;
从异或门逻辑电路来看,只要两条输入的线路状态不同,输入才是1,输出是1,如果两个输入都是1,输出也是0。如果c = 5 ^ 3; 先将5转成二进制数101,101与1进行或操作,将3前面补0,补成011,这样将两个二进制树按位与,结果为110,也就是c=6。
如面试常问的交换a= 5;b = 3;不借助中间变量:
a = a^b; // 101^011 = 110 ;十进制是6;
b = a^b; //此时a = 6, 110^011 = 101; 十进制是5;
a = a^b; //此时=a = 6; b = 5;110^101 = 011; 十进制是3;
这样就完成两个数的交换。
4.& 、| 、^位操作符与=号联用,&=,|=,^=。
c &= a; //等价c = c & a;
c &= a & b;//等价c = c & (a & b)
c |= a; //等价c = c | a;
c |= a | b;//等价c = c | (a | b)
c ^= a; //等价c = c ^ a;
c ^= a ^ b;//等价c = c ^ (a ^ b)



