美文网首页js css html
JS 异或(位运算)

JS 异或(位运算)

作者: Cherry丶小丸子 | 来源:发表于2022-06-14 17:28 被阅读0次

    当且仅当只有一个表达式的某位上为 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);
    }
    

    相关文章

      网友评论

        本文标题:JS 异或(位运算)

        本文链接:https://www.haomeiwen.com/subject/bfmzmrtx.html