不使用臨時變量交換兩個整數變量

代碼實例

先看一下交換變量的常規方式:

public static void swap1() {
	int i = 1, j = 5;
	System.out.println("i:" + i + ",j:" + j);
	int tmp=i;
	i = j;
	j = tmp;
	System.out.println("i:" + i + ",j:" + j);
}

輸出:

i:1,j:5
i:5,j:1

使用臨時變量存儲一下其中一個值,這種方法所有人都知道,且可以交換任何變量。

如果是int或者long等整數變量,還可以通過以下方式交換:

public static void swap2() {
	int i = 4, j = 5;
	System.out.println("i:" + i + ",j:" + j);
	i = i ^ j;
	j = i ^ j;
	i = i ^ j;
	System.out.println("i:" + i + ",j:" + j);
}

輸出:

i:4,j:5
i:5,j:4

從代碼可以看出,經過3次異或變量就換掉了。

什麼是異或

要理解上面交換原理,我們先看看什麼是異或:

- 變量1 變量2 變量3
值1 1 1 0
值2 0 1 0
結果 1 0 1

二進制異或的結果是:不同爲1,相同爲0

實例分析

以上例子中,第一次異或,結果=1:

- 變量1 變量2 變量3
值1 1 0 0
值2 1 0 1
結果 0 0 1

得出結果001就類似中間變量,在下面兩次異或時,都得到另一個變量的值(4去異或就得到5,5去異或就得到4)

第二次異或,結果=4:

- 變量1 變量2 變量3
值1 0 0 1
值2 1 0 1
結果 1 0 0

第三次異或,結果=5:

- 變量1 變量2 變量3
值1 0 0 1
值2 1 0 0
結果 1 0 1

注意:這種交換變量方法也只適用於整數,float、double之類的是不行的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章