交換2個數值的方法
阿新 • • 發佈:2019-02-08
如何交換2個變數的值?一般來說,想到的方法是再找一個臨時變數,通過一種順序存放的方式來達到交換值的效果。
比如有a,b這2個變數。取同類型的變數temp。
temp = a ; a = b ; b = temp ; 這樣就完成了交換。
但這樣做的話會多使用一個temp的記憶體。如果沒有溢位的問題,可以嘗試加減法。 a = a + b ; b = a - b ; a = a - b ; 換成數學運算來表示,a1 = a + b ; b1 = a1 - b = a + b - b = a ; a = a1 - b1 = a + b - a = b ; 完成整個運算無需temp。 還有一種方法,使用異或運算。 2個變數a和b。方法如下: a = a^b ; b = b^a ; a = a^b ; 交換的過程: a1 = a^b ; b1 = b^a1 = b^a^b = a ; a1 = a1^b1 = a^b^a = b ; 這裡的b1與a1就是我們想要的。 /*----------------------- 關於異或運算 ---------------------*/ 異或,相同為0,不同為1 。 真值表:
根據真值表我們可以得到:a^a = 0 ; b^0 = b ;
假設t = 0011 ;那麼 t^0000 = 0011 ^ 0000 = 0011 ;
t^1111 = 0011 ^ 1111 = 1100 ;
temp = a ; a = b ; b = temp ; 這樣就完成了交換。
但這樣做的話會多使用一個temp的記憶體。如果沒有溢位的問題,可以嘗試加減法。 a = a + b ; b = a - b ; a = a - b ; 換成數學運算來表示,a1 = a + b ; b1 = a1 - b = a + b - b = a ; a = a1 - b1 = a + b - a = b ; 完成整個運算無需temp。 還有一種方法,使用異或運算。 2個變數a和b。方法如下: a = a^b ; b = b^a ; a = a^b ; 交換的過程: a1 = a^b ; b1 = b^a1 = b^a^b = a ; a1 = a1^b1 = a^b^a = b ; 這裡的b1與a1就是我們想要的。 /*----------------------- 關於異或運算 ---------------------*/ 異或,相同為0,不同為1 。 真值表:
a^b | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |