位運算
簡介
眾所周知,在計算機中,任何對數的處理都會迴歸於對相應二進位制數的處理。我們把這對應的二進位制形式稱為機器數(最高位儲存符號,“0”是“+”,“1”是“-”),位運算可以對機器數直接進行一元操作(有一個被處理數)或二元操作(有兩個)。在平時,位運算比部分正常運算略快;不過當問題本身涉及到對二進位制數的轉化與處理時,位運算更能發揮巨大的作用。
位運算子簡介
- 左移運算子 <<
對於一個二進位制數,我們使用左移操作,它包含被操作值和移位值,左移操作就是將該數每一位上的數向左移動移位值,如0000 0000 0000 0011(3)向左移位1一位成為0000 00000000 0110(6).
v<<s
上述程式碼展示了左移運算子的使用,v是被操作的整數值,s是移動位數。
對於二進位制數,我們知道每一位上等於右邊一位的兩倍。那麼,左移一位即等於乘2。那麼3<<1 便等價於(1×2^1+1×2^0)×2=6。位移n位,以此類推,等於原值的2^n倍。
- 右移運算子 >>
v>>s
據左移運算子的功能類推可知,右移運算子即將每一位右移n位。位移後的值等於原值的1/2^n倍。
對於位移運算子,位移後騰出的位置用“0”填充,超出邊界的值捨棄。
- 按位反運算子 ~
位反運算子將每一位轉換為它的反面。
- 按位或運算子 |
對兩個等長二進位制整數值操作,若兩個數的對應位中只要有一個及以上的“1”,結果新值中此位為“1”,其餘情況此位則為“0”。
- 按位異或運算子 ^
對兩個等長二進位制整數值操作,若兩個數的對應位中只有一個為“1”,新值相應位為“1”,而若都是“0”或“1”,相應位為“0”。
- 按位與運算子 &
對兩個等長二進位制整數值操作,若兩個數的對應位中兩個都是“1”,新值相應位為“1”,其餘情況新值相應為皆為“0”.