js css html

JS 异或(位运算)

2022-06-14  本文已影响0人  Cherry丶小丸子

当且仅当只有一个表达式的某位上为 1 时,结果的该位才为 1。否则结果的该位为 0,简单的说就是-----相同为 0,不同为 1

语法:result = expression1 ^ expression2
按位异或 是对两个表达式执行 按位异或,先将两个数据转化为二进制数,然后进行 按位异或运算,只要位不同结果为 1,否则结果为 0

例如:
let a = 5;
let b = 8;
let c = a ^ b;
console.log(c) // 13

解析:
a 转二进制数为:0101
b 转二进制数为:1000
那么按照 按位异或 运算之后得到:1101(相同为 0,不同为 1),得到 c 的值就是 13
特点

一、满足交换率
abc === cba === bac

二、两个相同的数字异或操作得到的一定是 0
a^a === 0

三、0 和 其他数字异或操作得到的一定是其他数字
0^a === a

常见场景
一、给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素
let arr = [1, 3, 1, 2, 2, 7, 3, 6, 7]

// es5 解决方案
function fnc(arr){
    let result = 0;
    for(let i = 0; i < arr.length; i++){
        result  = result ^ arr[i];
    }
    return result;
}

// es6 解决方案
function fnc(arr){
    return arr.reduce((a, b) => a ^ b, 0);
}
二、两个数相加不使用四则运算得出和
function sum(a, b){
    if(a == 0) return b;
    if(b == 0) return a;
    let newA = a ^ b;
    let newB = (a & b) << 1;
    return sum (newA, newB);
}
上一篇下一篇

猜你喜欢

热点阅读