位运算的一些技巧总结
位運算
這里主要總結一些位運算的基礎用法,不從位運算的運算過程展開了:
1.&(and)運算
&運算通常用于二進制取位操作,例如一個數 & 1的結果就是取二進制的最末位。
基礎用法:
(1)可以用來判斷一個整數的奇偶,二進制的最末位為0表示該數為偶數,最末位為1表示該數為奇數。
(2)x & (x-1) 用于消去 x 的最后一位 1。
(3)在運用(2)的基礎上可以用來判斷一個正整數是不是2的整數冪次,如果x & (x-1) 是0,說明是;如果不是0,說明不是;
2.| (or)運算
|運算通常用于二進制特定位上的無條件賦值,例如一個數 | 1的結果就是把二進制最末位強行變成1。
基礎用法:
(1)如果需要把二進制最末位變成0,對這個數or 1之后再減一就可以了,其實際意義就是把這個數強行變成最接近的偶數。
(2)
3.^(xor)運算
^運算通常用于對二進制的特定一位進行取反操作,因為異或可以這樣定義:0和1異或0都不變,異或1則取反。
基礎用法:
(1) ^ 運算的逆運算是它本身,也就是說兩次異或同一個數最后結果不變,即(a ^ b) ^ b = a。
(2)一個數 a^a=0;
(3)運用(1)可以延伸很多用法,比如判斷一個數組里面出現一次的數(其他的數出現兩次);
(4)是第(3)的進階,有一個 n 個元素的數組,除了兩個數只出現一次外,其余元素都出現兩次,讓你找出這兩個只出現一次的數分別是幾?
這道題的思路是把所有元素都異或,那么得到的結果就是那兩個只出現一次的元素異或的結果。然后把這個結果轉化為二進制,找到為 1 的一個位置,根據這個位置是否為1把數組里所有的元素分成兩部分;然后兩部分分別異或,得到的就是兩個只出現一次的數;
4.這幾種常見的位運算運算性質
(1)信息丟失
位運算中“與”、“或”會造成信息丟失,他們是單向運算,不可逆運算。
但是“異或”不會,例如:
x ^ a = y;
當a 確定時,x與y 一一對應,且
x = y ^ a;
(2)運算性質
一般情況下,結合律和分配律是失效的,只有交換律能安全使用。
例如:
交換律:
a | b=b | a;
a ^ b=b ^ a;
a & b=b & a;
結合律:
(3|1)&2=2;
3|1&2=3;
分配律:
(4|3)^1=6;
(4 ^1 ) | ( 3 ^1)=7;
但是對于單一的位運算來說,結合律都是符合的,其實就是變為了交換律;
貼一張用法大全圖:
總結
以上是生活随笔為你收集整理的位运算的一些技巧总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源app后台开源框架集合 java
- 下一篇: Json笔记-高德地铁数据分析