/**
* @author zengfeiyang
* @date: 2020-12-11 16:57
* @description 不用額變數,利用位運算互動兩個數
* * 異或運算
* 異或運算又叫無進製相加,相同為0,不同為1
* 舉例:
* a: 0 0 1 1 1 = 7
* b: 0 1 1 0 1 = 13
* ----------------------
* a^b 0 1 0 1 0 = 10
* * 異或運算特性:
* n ^ n = 0,乙個數與自身異或,結果為零
* 0 ^ n = n,乙個數與零異或,結果為自身
* 多個數字異或運算符合交換律和結合律
* * 注意:這兩個變數的值可以相同,但必須指向不同的記憶體區域;
* 不然,指向完本例互動,會將變數指向的值刷為0
* */
public
class
swaptwonum
; system.out.
println
(arr[0]
);system.out.
println
(arr[1]
);swap
(arr,0,
1); system.out.
println
(arr[0]
);system.out.
println
(arr[1]
);system.out.
println
("********************=");
// 注意:i 和 j 都指向了陣列第0下標位置,交換後,被刷為0值了
int[
] temp =
;int i =0;
int j =0;
swap
(temp,i,j)
; system.out.
println
(temp[i]
+" , "
+ temp[j]);
}public
static
void
swap
(int
arr,
int i,
int j)
}
列印結果如下:
8
20208==
====
====
====
*****==
235352
====
====
====
====
*****0
,0
不用臨時變數交換兩個數的值
就地交換兩個數是比較經典而且基礎的演算法之一。我們要交換兩個數字,通常的做法就建立乙個中間變數,然後進行迴圈賦值,比如說下面的 void switch int p1,int p2 這種做法是最常見的一種交換兩個數字的方法,但研究演算法的人總是會提出比較詭異的問題,比如說在手持裝置中,記憶體資源很寶貴...
不用臨時變數交換兩個數的值
就地交換兩個數是比較經典而且基礎的演算法之一。我們要交換兩個數字,通常的做法就建立乙個中間變數,然後進行迴圈賦值,比如說下面的 void switch int p1,int p2 這種做法是最常見的一種交換兩個數字的方法,但研究演算法的人總是會提出比較詭異的問題,比如說在手持裝置中,記憶體資源很寶貴...
不用中間變數交換兩個數的值
當要交換兩個數的值時,通常的做法是定義乙個臨時變數,然後再進行交換。那麼能不能不用臨時變數而交換兩個數的值呢?可以的!c語言提供的異或運算就可以實現這樣的操作。異或運算子 也稱xor運算子,它的規則是若參加運算的兩個二進位同號,則結果為0 假 異號為1 真 即0 0 0,0 1 1,1 0 1,1 ...