如何在不引入第三個變量的情況下互換兩個變量的值

如何在不引入第三個變量的情況下互換兩個變量的值

例:x = 4;y = 5。如何在不引入第三個變量的情況下互換x與y的值?

算術運算

第一種方法是加法。

x = x + y;
y = x - y;
x = x - y;

這個方案的缺陷在於,當x或者y足夠大的時候,可能產生溢出。

第二種方法,把加法變爲減法,與方案一類似。

x = x - y;
y = x + y;
x = y - x;

當然,改換成乘法除法也可以解決以上問題。但是算術運算要特別注意兩個問題:

  1. 溢出問題:在運算過程中可能會產生溢出現象,加法和乘法的產生溢出概率大於減法和除法。
  2. 精度問題:當交換小數的時候,使用算術運算會產生計算精度問題。例:

在這裏插入圖片描述

如果真正的在實踐中實現這種功能,還需要加一些特殊判斷,比如兩個值相等該如何處理,兩個值可能會溢出該如何處理(try…catch…)。

異或運算

異或位運算(變成二進制之後進行異或運算),不太好理解。可以參考這篇文章按位異或運算符^.

x ^= y;
y ^= x;
x ^= y;

解構

這個解法是最簡單的方法,也不會產生溢出問題:直接運用解構手法,交換x和y的位置。

[x, y] = [y, x];

而這個方法更厲害的地方在於,它不僅僅可以用來交換數值(Number),也可以用來交換其他任意類型數據。

總結

在實際場景中遇到相關問題,推薦使用解構的方法,不僅代碼簡單,而且也不會產生溢出和計算精度的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章