C/C++位运算
- C/C++ 中的位运算一共5种:与,或,异或,左移,右移。如下:
1.按位与运算:0 & 0 = 0 1 & 0 = 0 0 & 1 = 0 1 & 1 = 1
2.按位或运算:0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
3.异或:1 ^ 1 = 0 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1
4.左移:00001010 << 2 = 00101000 每一位左移两位,右边多余出来的部分补0 11000101 << 2 = 00010100
5.右移:10101001 >> 2 = 00101010 每一位右移两位, 左边多余的部分补0 11110000 >> 3 = 00011110
- 左移和右移符号可以用于乘除运算
21 = (00010101) 21 >> 1 = (00001010) = 10 相当于 21/2 21 << 1 = (00101010) = 42 相当于 21*2
- & 可以用来求一个整数二进制中1的个数
int count = 0; while(number){ count = count++; number = number & (number-1) // 该运算使number右边的第一个1置0 }