介紹
按位運算符就是直接對整數在記憶體中的二進制位進行操作運算。比如,&&運算本來是一個邏輯運算符,但整數與整數之間可以用&進行運算。舉個例子,6的二進制是110,11的二進制是1011,那么6 & 11的結果就是110&1011=10,也就是十進制的2,它是二進制對應位進行邏輯運算的結果(0表示False,1表示True,空位都當0處理)。
C語言提供了六種按位運算符:
1、& 按位與:對兩個整數的二進制形式逐位進行邏輯與運算,原理為:1&0=0,0&0=0,1&1=1,0&1=0。
2、| 按位或:對兩個整數的二進制形式逐位進行邏輯或運算,原理為:1|0=1,0|0=0,1|1=1,0|1=1。
3、^ 按位異或:對兩個整數的二進制形式逐位進行邏輯異或運算,原理為:1^1=0,1^0=1,0^1=1,0^0=0。
4、~(按位非):對該整數的二進制形式逐位取反。
5、<< 左移:m<<n的含義為把整數m表示的二進制數左移n位,高位移出n位都捨棄,低位補0。 (此時將會出現正數變成負數的形式)。
6、>> 右移:m>>n的含義為把整數m表示的二進制數右移n位,m為正數,高位全部補0,m為負數,高位全部補1。
按位加運算符其實就是按位異或,屬於邏輯運算指令。按位加運算不考慮進位,所以運算時,相同為0,相異為1。
按位加
用按位運算實現加法也就是計算機用二進制進行按位加運算,比如,1位數的加法在不考慮進位的基礎上,如下:
1+1=0
1+0=1
0+1=1
0+0=0
很明顯這幾個表達式可以用位運算的“^”來代替,如下:
1^1=0
1^0=1
0^1=1
0^0=0
也就是說,按位加運算符其實就是按位異或,屬於邏輯運算指令。按位加運算不考慮進位,所以運算時,相同為0,相異為1。
參與運算數仍以補碼出現,例如9按位加5可寫成算式如下,9按位加5=00001001^00000101= 00001100。