按位运算有按位与(&),按位或(|)和按位异或(^)。
按位运算都是先将变量转变为二进制,然后按相应规则进行运算。按位与,同为1才为1;按位或,同为0才为0;按位异或,不相同即为1。如果觉得难记,不妨这样想,0为flase,1为true,所以按位与,只有当都为true时才为true;而按位或,只有当都为flase时才为flase。
下面给出几个有关按位运算的题目,在题目中学运用。
一.求一个数的二进制中有多少个1?
//求一个数的二进制中有多少个1
int a(int x)
{
int count = 0;
while(x)
{
count ++;
x = x & (x - 1);
}
return count;
}
二.求384的二进制,使用按位运算求
//求384的二进制,使用按位运算求
void b(int x)
{
for(int t = 512;t>0;t=t/2)
{
if((x&t) != 0)
cout<<1;
else
cout<<0;
}
cout<
三.检验一个数是否为2的N次方
//检验一个数是否为2的N次方
void c(int x)
{
if(!(x&(x-1)))
cout<<"true"<
四.不使用除法符号求两个数的平均值
//不使用除法符号求两个数的平均值
int d(int x, int y)
{
return (x&y) + ((x^y) >> 1);
}
五.不使用第三个变量交换a和b(a,b均为int)
//不使用第三个变量交换a和b(a,b均为int)
void e(int &x,int &y)
{
x = x ^ y;
y = x ^ y;
x = x ^ y;
}