異或運算
運算規律
相同為0,不同為1
舉例說明:有兩個二進制數,分別為a
和b
,他們兩個異或計算。
10110^00111=10001
一個值於0異或,都是這個數
a^0=a
任何數跟自己異或,都為0
a^a=0
滿足交換律和結合律
(a ^ b) ^ c = a ^ (b ^ c)
兩值交換
let a = 5;
let b = 10;
// 值交換
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log('a=>', a)
console.log('b=>', b)
1. a = a ^ b; 此時: a = a ^ b; b = 10;
2.b = a ^ b; 此時:b = a ^ b ^ b。根據上邊的規律,【任何數跟自己異或為0】得到: b = a ^ 0根據規律,進而得到 b = a。
3.a=(a ^ b) ^ (a ^ b ^ b)=a^b^a=b
有一個數組,只有一種數出現了奇數次,其它所有樹出現了偶數次,怎么找出出現奇數次的這個數?
const a = [2,3,4,5,6,5,5,6,4,3,2];
// 輸出奇數
number = 5;
我們通過異或運算,代碼如下
const arr = [2,3,4,5,6,5,5,6,4,3,2];
let number = arr[0];
for (var i = 1; i < arr.length; i ++) {
number = number ^ arr[i]
}
console.log('number=>', number);
我們把數組中的每個數都進行異或運算,就會得出奇數次出現的那個數。
簡單加解密
我們有明文text,秘鑰key,進行異或運算得到密文cipher
加密
const cipher = text ^ key;
解密
const text = cipher ^ key;
const cipher = text ^ key;
const text = (text ^ key) ^ key;