CottLi
3/10/2020 - 1:48 AM

C位操作

  1. 位操作
  2. 无中间变量实现数据交换
  3. 判断奇数偶数
// 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 即可,而末位变为零则代表偶数;