位操作在算法中的運用

位操作在算法中的運用

 

 

1. 與操作&

100 & 111 = 100

 

2. 或操作|

100 | 000 = 100

 

3. 異或^

100 ^ 000 = 100

 

4. 取反~

~100 = 011

 

5. 向左移位<<

1<<2 = 100

即2的2次方,等於4

 

6. 向右移位>>

16>>2 = 00100

即16的2的-2次方,等於4

 

note1:

移位和與操作結合,用來判斷一個數的某一位是否爲1,這個功能可以用在subset,即子集問題中。

例如:

判斷數字8的第三位是否爲1?

8&(1>>3)==1?

 

note2:

移位和或操作結合,用來將一個新的二進制位存儲到一個整形數中,這個功能常用於優化內存,或者某些棋盤類型的問題中。

例如:將下面的棋盤保存爲一個整形數

1 0

0 1

int a = 0;

a |=(number<<i)

 

note3:

移位和異或操作結合,用來將數字的某一位取反,用在棋盤類型的問題中。

例如:

1 0

0 1

轉爲1001

若對坐上角1取反,則結果應爲1001^=(1<<3)

   1001

^  1000

=----------------

   0001

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章