常见位运算总结
常见的位运算有六种:
- and运算,按位与:
&
有零为零 - or运算,按位或:
|
有一为一 - xor运算,按位异或:
^
相同为零,不同为一 - not运算,按位取反:
~
- shl运算,左移:
<<
- shr运算,右移:
>>
- and运算,按位与:
优先级从上往下递减
~
<<, >>
&
^
|
&=, ^=, |=, <<=, >>=
应用:
对于一个整数x,
乘2:x << 2
;
除2:x >> 2
;
判断一个数是偶数:x & 1
;
将最后一位变成1:x | 1
;
将右数第k为变成1:x | 1 << (k - 1)
;
交换a,b:
a ^= b;
b ^= a;
a ^= b;
求-x:~x + 1
;
判断是2的幂:!(n & (n - 1))
;
二进制中1的个数:
int count = 0;
while(x) {
++count;
x = x & (x - 1); //将最右端的1变成0
}
return count;
对2^n
取余:x & (1 << n - 1)
;
加法a+b操作:
int addition(int a, int b) {
if(b == 0) {
return a;
}
else {
return addition(a ^ b, a & b << 1);
}
}