不用使用中間變數讓兩個int變數的值互換
阿新 • • 發佈:2018-11-26
不用使用中間變數讓兩個int變數的值互換
這個問題在面試的時候出現概率很高,相信還有很多人不會
在回答這個問題前,讓我們先看看異或這個運算子
什麼是異或
變數的值不同時結果為1,值相同時結果為0
在java中異或的符號是 ^,具體運算結果看下錶:
a | b | 值 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | 0 |
1 | 0 | 1 |
正確做法
瞭解了什麼是異或後,我們在看看看正確的做法,程式碼如下:
int a =2;
int b =3;
System.out.println("a="+a+",b="+b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a="+a+",b="+b);
輸出結果
a=2,b=3
a=3,b=2
解釋一下
神奇吧,兩個變數經過3次異或後,值就互換了,示例為了大家理解方便舉例變數2和3,實際上任何值都是一樣的
a = 2 = 10 (二進位制)
b = 3 = 11 (二進位制)
第一次異或
a = a ^ b;
結果: 10 ^ 11 = 01,a = 01
第二次異或
b = a ^ b;
結果:01 ^ 11 = 10,b=10;b的值已經換過來了
第三次異或
a = a ^ b;
結果:01 ^ 10 = 11,a=11;a的值也換過來了
總結
- 異或:值不同時異或結果為1,值相同時異或結果為0
- 第一次異或的結果 等於 a b 兩個變數的差異值
- 第二次,差異值異或b,結果自然就是另一個變數的值a,這個時候b=之前的a
- 第三次:差異值異或b,結果自然就是b