其他分享
首页 > 其他分享> > 异或 应用

异或 应用

作者:互联网

    public static void process1(int[] arr) {
        int eor = 0;
        for (int ar : arr) {
            eor ^= ar;
        }
        // eor = a ^ b 两个奇数 结果为 1
        // eor != 0
        // eor 必然有一个位置上是 1
        /*
        提取罪右侧的 1
            eor :  1 0 1 0 1 1 1 1 0 0
           ~eor :  0 1 0 1 0 0 0 0 1 1
       ~eor + 1 :  0 1 0 1 0 0 0 1 0 0
              & :  0 0 0 0 0 0 0 1 0 0
         */
        int rightOne = eor & (~eor + 1);
        int eor1 = 0;
        for (int a : arr) {
            if ((a & rightOne) != 0) {
                eor1 ^= a;
            }
        }
        System.out.println(eor1 + " " + (eor ^ eor1));
    }

标签:arr,eor1,rightOne,int,eor,异或,ar,应用
来源: https://www.cnblogs.com/liuzonglin/p/16691635.html