异或运算符的性质
0与1的运算:相同得 0,相异为 1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 0 = 1
0 ^ 1 = 0
根本逻辑
12 ^ 5 = 9
1 | 1 | 0 | 0 | = 12 |
---|---|---|---|---|
0 | 1 | 0 | 1 | = 5 |
1 | 0 | 0 | 1 | = 9 |
满足交换律
A ^ B ^ c = A ^ c ^ B = B ^ c ^ A = C ^ B ^ A
运用
需求:传入一个数组,数组有且只有一个元素出现过奇数次,返回该元素
- 关键字:只有一个元素出现奇数次
function demo(arr) {
return arr.reduce((prev, next) => prev ^ next);
}
console.log(demo([10, 3, 2, 3, 5, 2, 5])); // 10
运算过程 10 ^ 3 ^ 2 ^ 3 ^ 5 ^ 2 ^ 5
交换律得 10 ^ 3 ^ 3 ^ 2 ^ 2 ^ 5 ^ 5 相异为 1, 相同为 0;3 与 3 的二进制都相同,故 3 ^ 3 = 0;2,5 同理。最后只剩下 10 ^ 0 = 10