常考数据结构与算法:异或操作_i++


public class XorBit {
    public static void main(String[] args) {

        int[] arr = {1,1,3,2,3,2,3,4};
        int temp = 0;
        for (int i = 0; i < arr.length; i++) {
            temp = arr[i]^temp;
        }
        int eor = temp;

        // 0111
        // 提取最右侧的1
        temp = temp & ((~temp)+1);

        int right = 0;
        int[] arr1 = new int[arr.length];
        int[] arr2 = new int[arr.length];

        for (int i = 0; i < arr.length; i++) {
            right = arr[i] & temp;
            if(right == temp){
                arr1[i] = arr[i];
            }else{
                arr2[i] = arr[i];
            }
        }

        temp = 0;
        for (int i = 0; i < arr1.length; i++) {
            temp = arr1[i]^temp;
            //System.out.print(arr1[i]+" ");
        }
        System.out.println(eor +" " +temp+"  "+(eor ^ temp));

        temp = 0;
        for (int i = 0; i < arr2.length; i++) {
            temp = arr2[i]^temp;
            //System.out.print(arr1[i]+" ");
        }

        // 0111
        // 0011
        // 0100
        System.out.println(temp);
    }
}