位運算
位運算
我們先來看看位運算操作符:& (按位與)、| (按位或)、^ (按位異或)、~ (按位取反)、>> (按位右移)、<< (按位左移)。
位運算符優先級比+低,注意加小括號!
1、&(按位與) 從概念上來講,就是將參與運算的兩個分量對應的每一位來做邏輯與運算,若兩者都為真(等於1),則結果才為真(等於1)。否則都為假(等於0)。
即:1 & 1 = 1 、1&0 = 0 、0&1 = 1、0&0 = 0
這裏我們先來看看那一個8位二進製的例子:
7&8 = 0000 0111 & 0000 1000 = 0000 0000 = 0
7&6 = 0000 0111 & 0000 0110 = 0000 0110 = 6
2、| (按位或) 即把參與運算的每個分量對應的每一位來做邏輯或運算,即兩者都為假(為0)時,才為假(為0),否則皆為真。
即:0|0 = 0、1|0 = 1、0|1 = 1、1|1 = 1
來看看8位二進製的例子:
7|8 = 0000 0111 | 0000 1000 = 0000 1111 = 15
7|6 = 0000 0111 | 0000 0110 = 0000 0111 = 7
3、^(按位異或) 即把參與運算的每個分量對應的每一位來做異或運算,即兩者相同為假,不同為真。
即:0|0 = 0、 1|0 = 1、0|1 = 1、 1|1 = 0
看下麵的例子:
7^8 = 0000 0111 ^ 0000 1000 = 0000 0111 = 7
7^6 = 0000 0111 ^ 0000 0100 = 0000 0011 = 3
4、~(按位取反) 即把二進製位的每一位進行取反運算,簡而言之就是1變成0,0變成1。
直接看例子:
~7 = ~0000 0111 = 1111 1000 = 248
5 、>>(按位右移)把二進製位整體向右移動。
7>>1 = 0000 0111 >> 1 = 0000 0011 = 3
7>>2 = 0000 0111 >> 2 = 0000 0001 = 1
這裏右移等於除了2的N次方,N為右移的位數。
6 、<<(按位左移)這裏就不詳細說了,和右移相反。
位運算比乘除法效率高,所以乘以除以2時可用位操作。盡量不要對int型負數進行按位移操作。
最後更新:2017-04-03 12:55:52