c++中的位運算相關規律總結和口訣
阿新 • • 發佈:2019-01-05
位運算應用口訣
清零取反要用與,某位置一可用或
若要取反和交換,輕輕鬆鬆用異或
左移與右移--<<與>>
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