首页 > 编程学习 > 异或 应用

异或 应用

发布时间:2022/9/14 6:12:43
    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));
    }
Copyright © 2010-2022 mfbz.cn 版权所有 |关于我们| 联系方式|豫ICP备15888888号