兩個變數的值交換的多種方法

2021-07-22 08:08:34 字數 1419 閱讀 9105

)一文中談到過將兩個變數的值進行交換的 swap 函式實現,它們分別是通過指標和引用並使用中間變數來實現的,這裡再把**貼一下。

void swap(int *x, int *y)

void swap(int &x, int &y)

當然上面兩種方法是很好也是很好理解很容易想到的方法,下面再介紹兩種不需要使用中間變數的方法。

1. 使用加減運算:

先給出**入下:

#include using namespace std;

void swap(int& a, int& b)

int main()

執行結果如下:

下面再來分析它為什麼能夠達到交換的目的:首先 a = a + b 使得 a 值變為 a 與 b 的和,然後 a - b 的值就變成原先 a 的值了,賦給 b 從而使得 b 的值變為原先 a 的值,再接著 a - b 是原先 a 與 b 的和減去原先 a 的值即是原先 b 的值,再賦給 a 從而使得 a 與 b 的值實現交換。

但這樣簡單的加減運算有一點不好,就是在做 a + b 和 a - b 時可能會導致資料溢位。

2. 使用按位異或運算:

同樣先給出**:

#include using namespace std;

void swap(int& a, int& b)

int main()

執行結果同樣也是正確的:

下面來分析:

首先要弄明白按位異或的概念,按位異或運算子「^」是將參與運算的兩個數對應的二進位制位相異或(異或就是對應的二進位制位相同則結果為 0,對應二進位制位不同則結果為 1,即 0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^1 = 0)。兩個相同的數進行按位異或運算後得到的數的二進位制位全是 0,而任何乙個數與 0 進行按位與運算的結果都不變,再根據結合律和交換律可以得到乙個很重要的規則:

a ^ b ^ a = b。

由 a ^= b 得 a 的值變為了 a ^ b,再由 b ^= a 得到 b = b ^ (a ^ b) = a,從而 b 的值變為了 a 原先的值,最後由 a ^= b 得到 a = (a ^ b) ^ a = b,從而 a 的值變為了 b 原先的值。

使用按位異或運算來來實現兩個數的交換不會出現資料溢位的情況,所以推薦使用按位異或運算的方法而不使用加減運算的方法。

交換兩個變數的值(多種方法)

通常,在剛學習的階段,我們的做法是引入乙個新的變數,借助它來完成兩個變數的交換。就像把兩杯水交換一樣,要再買乙個杯子 才能完成交換。這種演算法易於理解,特別適合幫助初學者了解電腦程式的特點,是賦值語句的經典應用。在實際軟體開發當中,此演算法簡單明瞭,不會產生歧義,便於程式設計師之間的交流,一般情況下...

多種方法交換兩個數的值

方法1 程式例項 include void exchange int x,int y intmain 執行結果 方法2 include intmain 執行結果 此處通過巧用位操作符 按位異或 的方法,完成兩個數的轉化。按位異或操作符的口訣 相異為1,相同為0 三個按位異或的具體如下 注 以下二進位...

交換兩個變數的值的若干種方法

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