你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

异或 应用

2022/9/14 4:55:16
    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));
    }