• 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
    }