1. 程式人生 > >c++中的位運算相關規律總結和口訣

c++中的位運算相關規律總結和口訣

位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕鬆鬆用異或

左移與右移--<<與>>

a<<n <=> a*(2^n)  例如:a<<1 <=> a*2

a>>n <=> a/(2^n)  例如:a>>1 <=> a/2

按位與-- &

1 清零特定位 (mask中特定位置0,其它位為1,s=s&mask)

例:將char型變數a的最低位置0:a=a&0376=a&11111110
2 取某數中指定位 (mask中特定位置1,其它位為0,s=s&mask)

例:char c;short int a;取出a的低位元組放在c中:c=a&0377=a&0000000011111111

a%(2^n) <=> a&(2^n-1)

例如:a%2<=> a&1, 其中,a&1==0表示a為偶數,a&1==1表示a為奇數(”0偶1奇“)

           a%4 <=> a&3

           a%8 <=> a&7

     a%16 <=> a&15

按位或-- |
常用來將源運算元某些位置1,其它位不變。 (mask中特定位置1,其它位為0 s=s|mask)

例:a=a|oxff=a|0000000011111111

位異或-- ^
1 使特定位的值取反 (mask中特定位置1,其它位為0 s=s^mask)
2 不引入第三變數,交換兩個變數的值

void swap(int x , int y){

x ^= y; y ^= x; x ^= y;

}

注意:a^a=0  ,  a^0=a

按位取反--~

~1不是-1,而是-2