c++位運算符介紹
下面是C/C++位操作運算符列表,其中運算符優先級為從上到下遞減,但<<,>>優先級相同。
操作符 | 功能 | 用法 |
~ | 位求反 | ~expr |
<< | 左移 | expr1 << expr2 |
>> | 右移 | expr1 >> expr2 |
& | 位與 | expr1 & expr2 |
^ | 位異或 | expr1 ^ expr2 |
| | 位或 | expr1 | expr2 |
位簡介
位是數據存儲的最小單位。在 計算機中的二進制數系統中,位,簡記為b,也稱為比特,每個0或1就是一個位(bit)。
位操作詳解
我們先來看看位運算操作符:& (按位與)、| (按位或)、^ (按位異或)、~ (按位取反)、>> (按位右移)、<< (按位左移)。
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 <<(按位左移)這裏就不詳細說了,和右移相反。
然後講講異或,它有一個性質是,兩次異或,能還原回來 例如 a=7,b=6; a = a^b^b 我們來看看那二進制的操作 a = 0111 b = 0110 c = a^b = 0001 a = c^b = 0111
c++位運算符介紹