Java中"與"、"或"、"非"、"異或"

只愛宅zmy發表於2020-10-30

&  按位"與"運算子

public class Demo {
    public static void main(String[] args) {
        // &運算子
        int a = 16;
        //16轉換為二進位制為10000
        int b = 17;
        //17轉換為二進位制為10001
        // 兩個運算元都為1時才為1
        //    10000
        // &  10001
        //--------------
        //    10000
        System.out.println(a&b);
        //輸出為16
    }
}

| 按位"或"運算子

public class Demo {
    public static void main(String[] args) {
        // |運算子        int a = 16;
        //16轉換為二進位制為10000
        int b = 17;
        //17轉換為二進位制為10001
        // 兩個運算元只要有一個1就為1
        //    10000
        // |  10001
        //--------------
        //    10001
        System.out.println(a|b);
        //輸出為17
    }
}

~ "取反"運算子

public class Demo {
    public static void main(String[] args) {
        // ^運算子
        int a = 8;
        int b = 9;
        //8轉換為二進位制為1000
        //9轉換為二進位制為1001
        // 異或規則相同為0不同為1
        //    1000
        // |  1001
        //--------------
        //    0001
        System.out.println(a^b);
        //輸出為1
    }
}

假如有一個陣列中有兩個相同的內容只有一個是不一樣的,那麼如何找到這個不一樣的數。

可能我敘述的不太容易理解,假如我們有以下陣列。
int temp = {1,2,3,4,5,4,3,2,1};
可以看到陣列中的1、2、3、4都是有兩個,但是隻有5有一個,而我們要做的就是找到這個5。
如何用十分簡潔的程式碼就可以實現這個功能呢?
這裡使用了一個異或的特性。
public class Demo {
    public static void main(String[] args) {
        int[] temp = {1,2,5,2,1,4,4,15,5};
        int a = 0;
        for(int i=0;i<temp.length;i++) {
            a = a ^ temp[i];
        }
        System.out.println(a);
    }
}
執行這段程式碼。
C:\Users\PiLiPaLa\Desktop\Code\Eight>java Demo
15
成功的將15輸出了。
其實原理就是異或,有兩個相同的數就會抵消變成0,然後只剩下單獨的那一個。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983372/viewspace-2731107/,如需轉載,請註明出處,否則將追究法律責任。

相關文章