一般,為了實作swap函式,我們會創建一個臨時變數tmp
int tmp = a;
a = b;
b = tmp;
那么我們如何不使用臨時變數來實作交換呢?
下面給出兩種方法:
-
a = a + b;// a = a + b, b = a - b;// b = (a + b) - b = a; a = a - b;// a = (a + b) - a = b; -
a = a ^ b;// a = a ^ b; b = a ^ b;// b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a; a = a ^ b;// a = (a ^ b) ^ a = b ^ (a ^ a) = b ^ 0 = b;
我們第一次見這兩個騷操作可能會一臉懵B,下面解釋下為什么可以這樣做:
法一:理解一句話即可:“=” 右邊的結果賦值給左邊, 具體看注釋即可,
法二:需要我們理解 ^ 異或,異或的騷操作可不少,具體后面可能會講,
運算規則
相同為0,不同為1,即
1 ^ 1 = 0
0 ^ 0 = 0
1 ^ 0 = 1
由運算規則可知,任何二進制數與零異或,都會等于其本身,即A ^ 0 = A ,A ^ A = 0
異或性質
(1)交換律: A ^ B = B ^ A
(2)結合律: ( A ^ B ) ^ C = A ^ ( B ^ C )
(3)自反性: A ^ B ^ B = A (由結合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)
具體看注釋即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305188.html
標籤:java
上一篇:Java關鍵字:final,static,this,super
下一篇:java的圖書管理系統簡化版
