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

2021-10-23 04:20:39 字數 896 閱讀 5050

例: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;

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

溢位問題:在運算過程中可能會產生溢位現象,加法和乘法的產生溢位概率大於減法和除法。

精度問題:當交換小數的時候,使用算術運算會產生計算精度問題。例:

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

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

x ^= y;

y ^= x;

x ^= y;

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

[x, y]

=[y, x]

;

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

不引入第三個變數交換兩個整型數

今天又遇到了我剛接觸程式設計就遇到的乙個問題 交換兩個整型數,分別在引入第三個變數和不引入第三個變數的情況下完成。引入第三個變數,其實是經典的交換演算法,說它經典,是因為它適合任何情況,這裡不對此方法進行論述。這個是我大一時候做的一道課後題,當時不明白,就找了一下度娘,然後硬著頭皮看懂了,然後就交了...

交換兩個變數的值,不使用第三個變數

通常我們的做法是 尤其是在學習階段 定義乙個新的變數,借助它完成交換。如下 int a,b a 10 b 15 int t t a a b b t 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特點,是賦值語句的經典應用。在實際軟體開發當中,此演算法簡單明瞭,不會產生歧義,便於程式設計師之間的...

不借助第三個變數交換兩個變數的值

通常我們的做法是 尤其是在學習階段 定義乙個新的變數,借助它完成交換。如下 int a,b a 10 b 15 int t t a a b b t 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特點,是賦值語句的經典應用。在實際軟體開發當中,此演算法簡單明瞭,不會產生歧義,便於程式設計師之間的...