异或运算


异或运算

运算规律

相同为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