計算機中的數在內存中都是以二進制新式進行存儲的,用位運算就是直接對整數在內存中的二進制位進行操做,所以其執行效率很是高,在程序中儘可能使用位運算進行操做,這會大大提升程序的性能。javascript
&(與運算) 倆個位數都是1時,結果才爲1,不然爲0java
1 & 1 // => 1 1 & 0 // => 0 0 & 1 // => 0 0 & 0 // => 0 1 0 0 1 1 & 1 1 0 0 1 // => 10001
|(或運算) 倆個位數都是0時,結果才爲0,不然爲1性能
1 | 1 // => 1 1 | 0 // => 1 0 | 1 // => 1 0 | 0 // => 0 1 0 0 1 1 | 1 1 0 0 1 // => 11011
^(異或運算) 倆個位相同則爲0,不一樣則爲1優化
1 ^ 1 // => 0 1 ^ 0 // => 1 0 ^ 1 // => 1 0 ^ 0 // => 0 1 0 0 1 1 ^ 1 1 0 0 1 // => 01010
<< 左移運算,向左進行移位操做,高位丟棄,低位補 0~~~~code
let n = 1 n << 3 // => 8 // 移位前:0000 0000 0000 0000 0000 0000 0000 0001 // 移位後:0000 0000 0000 0000 0000 0000 0000 1000
右移運算,向右進行移位操做,對於無符號,高位補0、對於有符號位,高位補符號位
let n = 8 n >> 2 // => 2 // 移位前:0000 0000 0000 0000 0000 0000 0000 1000 // 移位後:0000 0000 0000 0000 0000 0000 0000 0010 let n = -8 n >> 2 // -2 // 移位前:1111 1111 1111 1111 1111 1111 1111 1000 // 移位後:1111 1111 1111 1111 1111 1111 1111 1110
位操做實現乘法除法ip
let n = 4; n >> 1 // => 2 n << 1 // => 8
位操做交換倆數內存
// 普通 function swap (a,b){ a = a + b; // 1 + 2 b = a - b; // 3 - 2 a = a - b; // 3 - 1 } // 位操做 function swap (a,b){ a ^= b; // a = (a^b) b ^= a; // b = (b^b)^a = a a ^= b; // a = (a^b)^a = (a^a)^b = b }
位操做判斷奇偶數io
if(0 == (n&1)) // 偶數
位操做交換符號function
let n = -8 ~n + 1 // => 8 let n = 8 ~n + 1 // => -8
位操做求絕對值class
function abs(a){ let i = a>>31; return i == 0? a: (~a+1) }
function abs(a){ let i = a>>31; return ((a^i)-i) }