C++位操作

C++位操作包括两种:

  1. 传统的C语言方式的位操作
  2. C++中利用bitset容器的位操作

一、传统的C方式位操作:


  1. 基本操作:
    使用一个unsigned int变量来作为位容器。
  2. 操作符:
    | 按位或操作符:result=exp1|exp2;当exp1和exp2中对应位中至少有一个为1时,result中对应位为1,否则为0。
    & 按位与操作符::result=exp1&exp2;当exp1和exp2中对应位全为1时,result中对应位为1,否则为0。
    ^ 按位异或或操作符:result=exp1^exp2;当exp1和exp2中对应位不相同时,result中对应位为1,否则为0。
    ~ 反转操作符:将位容器中的所有位都反转,1变为0,0变为1。
    << 按位左移操作符:exp<

>>和<<是移位操作符

int k = 1;
while (k < n)
{
k <<= 1; // k =2 * k
}

int A = X >> (n >> 1); // A = X * {2的(2*n)次方}
int B = X - (A << (n >> 1)); // B = X - A /{2的(2*n)次方}
int C = Y >> (n >> 1); // C = Y * {2的(2*n)次方}
int D = Y - (C << (n >> 1)); // D = Y - C /{2的(2*n)次方}

左移相当于乘. 左移一位相当于乘2;左移两位相当于乘4;左移三位相当于乘8;
右移相当于整除. 右移一位相当于除以2;右移两位相当于除以4;右移三位相当于除以8;

一般来讲,位移比乘除速度快.对效率要求高,而且满足2的幂次方的乘除运方,可以采用位移的方式进行

你可能感兴趣的:(C++位操作)