// C语言位运算
// 按位与运算
c = a & b // 0101,0111 & 1011,1011 = 0001,0011
//按位或运算
c = a | b // 0101,0111 | 1011,1011 = 1111,1111
//按位异或运算
c = a ^ b // 0101,0111 ^ 1011,1011 = 1110,1100
//按位求反运算
b = ~ a // ~ 0101,0111 = 1010,1000
// 移位运算:左移 << ,右移 >>,空出来的位置补零
b = a<< 2 // 1101,0011 << 2 = 0100,1100
b = a >> 2 // 0100,1100 >> 2 = 0001,0011
// 位运算的应用
1. 可灵活地处理二进制位:
1. 用 & 清零特定位:1010&0000=0000
2. 用 | 将某一位置1:1010|0100=1110
3. 取某数中指定位:
4. 不引用第三个变量,交换两个变量的值
a = a ^ b;
b = b ^ a;
a = a ^ b;
2. 按位与“用于二进制取位操作”
比如 a ^ 1 就是取出 a 的二进制的最末位,它可用于判断一个整数的奇偶:
即二进制最末位为0表示该数为偶数,最末位为1表示该数为奇数;
3. 按位或“用于二进制特定位上的无条件赋值”
比如 a | 1 就是把最末位强行变为 1。如果想把最末位强行变为 0,对使用
| ^ 1 后再减去 1 即可,而末位变为零则代表偶数;