閱讀642 返回首頁    go 阿裏雲 go 技術社區[雲棲]


位運算

位運算

我們先來看看位運算操作符:& (按位與)| (按位或)^ (按位異或)~ (按位取反)>> (按位右移)<< (按位左移)

 位運算符優先級比+低,注意加小括號!

 

1&(按位與) 從概念上來講,就是將參與運算的兩個分量對應的每一位來做邏輯與運算,若兩者都為真(等於1),則結果才為真(等於1)。否則都為假(等於0)。

即:1 & 1 = 1 1&0 = 0 0&1 = 10&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 = 01|0 = 10|1 = 11|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 = 10|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變成00變成1

直接看例子:

~7 = ~0000 0111 = 1111 1000 = 248

 

>>(按位右移)把二進製位整體向右移動。

7>>1 = 0000 0111 >> 1 = 0000 0011 = 3

7>>2 = 0000 0111 >> 2 = 0000 0001 = 1

這裏右移等於除了2N次方,N為右移的位數。

 

<<(按位左移)這裏就不詳細說了,和右移相反。

 

位運算比乘除法效率高,所以乘以除以2時可用位操作。盡量不要對int型負數進行按位移操作。

 

 

最後更新:2017-04-03 12:55:52

  上一篇:go c++異常
  下一篇:go [C/C++基礎知識] 那些被遺忘的鏈表知識