位运算符
&:按位与。
|:按位或。
~:按位非。
^:按位异或
<<:左位移运算符。
>>:右位移运算符。
<<<:无符号右移运算符。
1. 按位与(&)
按位与的运算规则
操作数1 | 0 | 0 | 1 | 1 |
操作数2 | 0 | 1 | 0 | 1 |
按位与 | 0 | 0 | 0 | 1 |
2. 按位或(|)
按位或的运算规则
操作数1 | 0 | 0 | 1 | 1 |
操作数2 | 0 | 1 | 0 | 1 |
按位或 | 0 | 1 | 1 | 1 |
3.按位非(~)
按位非的运算规则
操作数 | 0 | 1 |
按位或 | 1 | 0 |
4. 按位异或(^)
按位异或的运算规则
操作数1 | 0 | 0 | 1 | 1 |
操作数2 | 0 | 1 | 0 | 1 |
按位异或 | 0 | 1 | 1 | 0 |
1、如何快速找出一个二进制数中包含多少个1
假如数为num, num & (num - 1)可以快速地移除最右边的bit 1, 一直循环到num为0, 总的循环数就是num中bit 1的个数
public static int getBit1Sum(int input){
int res = 0;
while (input!=0){
res++;
input &= (input-1);
}
return res;
}
2、相关引申 Hamming Distance 汉明距离
int GethammingDistance(int x, int y) {
int res = 0, exc = x ^ y;
while (exc) {
++res;
exc &= (exc - 1);
}
return res;
}