5,javase程式碼實戰-運算子——位運算實現兩個變數的互換及其他方式(四)

程式設計侯發表於2018-02-25

問題介紹:
在程式經常用到兩個變數的互換,特別是在基於交換原理的排序演算法中,如果需要大量的交換,那麼高效的交換兩個變數,無疑會提高程式的效率。
可以使用異或運算子來實現。

實現程式碼:

 idea1(1, 2);
public static void idea2(int a,int b){
        a =a^b;
        b =b^a;
        a =a^b;
        System.out.println("a是:"+a);
        System.out.println("b是:"+b);
    }

這裡寫圖片描述

總結:^ 有一個特點就是 a^a = 0 即自身和自身異或為0。三行程式碼中,第一行為第二行提供服務。第一行和第二行為第三行提供服務。執行第二行 b=b^a 也就是 b =b^a^b 因為b^b=0 所以 b= a;執行第三行 a =a^b 也就是a=a^b^a 即a =b 。

擴充套件:
其他方法1:利用加減運算子實現

        a =a+b;
        b =a-b;
        a =a-b;

利用上面異或的分析方法,就可以理解了。這也是一種很好的方法,起碼不使用輔助變數。

其他方法2 ,使用輔助變數【不建議使用】

        int c =0;
        c=a;
        a=b;
        b=c;

相關文章