java兩個變量交換值不借助第三個變量所想


最近在看到java的位運算,這塊到目前為止也沒有用到過,因為不知道怎么用所以總感覺學不會。當然看到這里就想到之前看到過幾次的java實現兩個變量值交換,不通過中間變量的問題。又忘記了原理,各種搜索之后還是總結一下記下來吧。

首先只有兩個變量,相互交換值。因此每個值不能丟掉,且暫存變量有兩個,因此原理則是將兩個變量融合成一個變量放入一個暫存變量,然后變量和再和另一個暫存變量運算賦值為暫存變量,這時運算中的暫存變量便是交換值之后的變量。

public class ChangeDemo {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        a = a + b;
        b = a - b;
        a = a - b;
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

當然也可以考慮其他運算,需要考慮一些為0的條件。再有就是還可以考慮位運算中的異或操作。

public class ChangeDemo {
    public static void main(String[] args) {
        int a = 3;
        int b = 4;
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

原理同上,這里想說一下,位運算和邏輯運算還沒有區分一下。首先樣子上,邏輯運算上“&&”, “||”,則是兩個的,而位運算上"&","|","^"為一個的。邏輯運算是對兩個關系運算符來進行邏輯運算,兩邊的結果為true或false.而位運算則是對兩個二進制數的位進行邏輯運算。

上面代碼中a的位表示為011,b的位表示為100,(異或則是兩位相同為0,不相同為1)進而異或結果為a為111.將111與b異或后賦值為b,此時b為011,即為3,將此時的b 011與a 111異或賦值為a,即為100,即為4.

說到位運算,想到看到的一點是左移位,則右側補充0,而”有符號“的右移位,則符號指定為正時,左側補充0,符號為負時,左側補充1.還沒實際使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM