位运算
(一)按位与&
(1)去一个数的指定位
n=1010 1100;
n=n&0000 1111;
n=0000 1100;
(2)使一个数的指定位置为0
n=1010 1100;
n=n&1111 0000;
n=1010 0000;
(二)按位异或^
n=1010 1100;
n=n^0000 1111;
n=1010 0011;
(三)按位或 |
n=1010 1100;
n=n|0000 1111;
n=1010 1111;
位运算符图解
具体使用部分如下:
求一个数二进制中1的个数
//求一个数的二进制中有多少个1
int one(int x)
{
int count = 0;
while(x)
{
count ++;
x = x & (x - 1);
}
return count;
}
检验一个数是否为2的N次方
//检验一个数是否为2的N次方
void num(int x)
{
if(!(x&(x-1)))
cout<<"true"<<endl;
else
cout<<"flase"<<endl;
}
不使用除法符号求两个数的平均值
//不使用除法符号求两个数的平均值
int num(int x, int y)
{
return (x&y) + ((x^y) >> 1);
}
不使用第三个变量交换a和b(a,b均为int)
//不使用第三个变量交换a和b(a,b均为int)
void swap(int &x,int &y)
{
x = x ^ y;
y = x ^ y;
x = x ^ y;
}