位运算各种方法总结
位運算
- 1、按位與
- 2、按位或
- 3、按位取反
- 4、按位異或
- 5、按位同或
- 6、左移
- 7、帶符號右移
- 8、無符號右移
- 9、python實現各種位運算操作
- 10、位運算小技巧
- 11、應用
\quad \quad現代計算機中,幾乎都是二進制計算機(三進制計算機僅有少量),所有的數據都以二進制的形式存儲在設備中。位運算就是直接對整數在內存中的二進制位進行操作,計算時將十進制轉為 二進制,再進行計算。
\quad \quad需要注意,位運算是針對 二進制 的運算,對每一個位進行布爾運算操作。所以 手動 進行 位運算計算 時,需要將數轉換成二進制的表示形式,再進行計算。
1、按位與
\quad \quad計算時將 十進制 轉為 二進制 再進行計算,同位置為1,則結果為1,其余情況皆為0
- 結論:n&(n-1) 會去除 n 的位級表示中最低的那一位 1。
- 應用例題:二進制中1的個數
2、按位或
\quad \quad對應位上有一個為1,結果就為1。兩個都為0,結果才得0,類似加的關系。
3、按位取反
\quad \quad對每一位進行取反操作,如果是1則結果為0,是0則結果為1。即為反碼
4、按位異或
\quad \quad當兩個對應位不同時結果才為1,相同時得0.
性質:
-
任何數和 0做異或運算,結果仍然是原來的數,即a⊕0=a。
-
任何數和其自身做異或運算,結果是 0,即 a⊕a=0。
- 異或運算滿足交換律和結合律,a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
5、按位同或
\quad \quad當兩個對應位相同時結果才為1,不同時得0.
6、左移
\quad \quad將二進制位上的數向左移動,右邊補0.
7、帶符號右移
\quad \quad有符號整數最高位代表著數的正負,最高位為1代表負數,最高位為0代表正數。
\quad \quad帶符號右移是右移時,左邊補充最高位上的值。
8、無符號右移
\quad \quad二進制上的數向右移動,右移時左邊補0。
9、python實現各種位運算操作
| & | 按位與 | a&b |
| | | 按位或 | a|b |
| ~ | 按位取反 | ~a |
| ^ | 按位異或 | a^b |
| << | 按位左移 | a<<b |
| >> | 按位右移 | a>>b |
| - | 轉換為負數 | -a |
10、位運算小技巧
1、獲取二進制中最右邊的1,且其它位置為0: X & (-X)
因此,x 和 ?x 只有一個共同點:最右邊的 1。這說明 x & (-x) 將保留最右邊的 1。并將其他的位設置為 0。
2、將二進制中最右邊的1置為0: X & (X - 1)
-
(x - 1) 代表了將 x 最右邊的 1 設置為 0,并且將較低位設置為 1。
-
再使用與運算:則 x 最右邊的 1 和就會被設置為 0,因為 1 & 0 = 0。
11、應用
Leetcode之位運算
總結
- 上一篇: android 获取微信二维码 Diff
- 下一篇: 项目管理10大知识领域及5大过程