按位運算有按位與(&),按位或(|)和按位異或(^)。
按位運算都是先將變量轉變爲二進制,然後按相應規則進行運算。按位與,同爲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;
}