位運算包括
&
|
^
~
<<
>>
按位與
將某些變量中的某些位清0同時保持其他位不變。也可以用來獲取變量中的某一位。
例如:將int型變量n低8位全置為0,其余位保持不變。
n = n & 0xffffff00
如何判斷一個int型變量n的第七位。
n & 0x80 的值是否等于0x80
按位或
按位或運算通常用來將某變量中的某些位置置1且保留其他位不變。
例如,如果需要將int型變量n的低8位全置為1,而其他位保持不變
n = n | 0xff
按位異或
按位異或運算通常用來將某些變量中的某些位取反,且保留其他位不變。
例如,如果需要將int型變量n的低8位取反,而其余位不變,則可以執行
n ^= 0xff
異或運算特點:如果a ^ b = c, 那么就有 c ^ b = a 以及 c ^ a = b
另外異或還能實現不通過臨時變量,就能交換兩個變量的值
int a = 5, b = 7
a= a^b
b= b^a
a= a^b
可以實現a,b值交換
按位非
0變1,1變0
左移運算符<<
左移時,高位丟棄,低位補0,a的值不因運算而改變。左移n位,等于乘以2^n。
右移運算符>>
右移時,移出最右邊的位就被丟棄。a的值不因運算而改變。對于有符號數,如long,int,short,char類型變量,在右移時,符號位將一起移動,并且大多數c/c++編譯器規定,如果原符號位為1,則右移時高位就補充1,原符號位為0,則右移時高位就補0。右移n位,就相當于左操作數除以2^n,并且結果往小里取整。
思考
有兩個int型變量a和n(0 <= n <= 31),要求寫一個表達式,使該表達式的值和a的第n位相同。
(a>>n) & 1
或者(a & (1<<n))>>n ,條件是 (0 <= n < 31)