異或運算


異或運算

運算規律

相同為0,不同為1

舉例說明:有兩個二進制數,分別為ab,他們兩個異或計算。

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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM