位操作在算法中的運用
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