1. 程式人生 > >兩個int變數交換值的一些方式(巧用異或)

兩個int變數交換值的一些方式(巧用異或)

兩個int變數交換值輸出,我們程式設計的時候一般都是引入第三個變數temp,這種方式大家都知道,但是筆試題的時候往往都會限制用第三個變數,這時候也簡單,大家的第一反應是不是都是

int x = 3;
int y = 4;

x = x + y;    //x = 7
y = x - y;    //y = 4
x = x - y;    //x = 3

System.out.println("x = "+ x +" , y = " + y);

然後,這裡存在一個問題,就是int是有範圍的,x = x + y可能會出現超限的問題。有一次被這麼一問,有點懵逼,當時沒想到怎麼回答,回來後,才想到用異或。異或有個性質:一個數對另一個數異或兩次,數值不變。(大致秒數是這樣),所以呢,我們這裡可以這麼寫。

int x = 3;
int y = 4;

x = x ^ y;    //x = 3 ^ 4
y = x ^ y;    //y = 3 ^ 4 ^ 4 = 3
x = x ^ y;    //x = 3 ^ 4 ^ 3 = 4

System.out.println("x = "+ x +" , y = " + y);

另外,我們還可以一句好搞定,但是不推薦這樣寫,容易被人把頭給打裂。

int x = 3;
int y = 4;

//同學我跟你講,一定要這麼寫,顯得多高階啊。一寫出來,我保證你頭被打裂咯
y = ( x + y ) - ( x = y);    //3 + 4 -4  

System.out.println("x = "+ x +" , y = " + y);

當然你還可以搞個函式,傳兩個變數進去,然後直接返回交換的值。但是這些都不是最簡單的,下面介紹最簡單的方法

int x = 3;
int y = 4;

System.out.println("x = "+ y +" , y = " + x);

列印的時候直接交換變數位置,皮這一下,我很開心,不爽你又打不到我。(PS.臨時加的,寫到一半想總結一下所有的方法,查了一下看到這裡有人這麼皮過,我也皮一下,連結https://www.cnblogs.com/Brad-Lee/p/5808299.html