1. 程式人生 > >不用使用中間變數讓兩個int變數的值互換

不用使用中間變數讓兩個int變數的值互換

不用使用中間變數讓兩個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