如何交換兩個變數的值

weixin_33860553發表於2017-12-22

如何交換變數a和變數b的值?

方法一:引入第三個變數
這種方法比較常用,同時適用各種資料型別。以C語言程式碼為例,介紹如下:

int a=1, b=2;
int temp; //引入臨時變數
temp = a;
a = b;
b = temp;

方法二:不引入第三個變數
這種方法比較少見,並且對於不同的資料型別處理方式不一樣。筆者整理了三種處理方式,介紹如下:
1. 加減法:該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失

a = a + b; //求和
b = a - b; //和-b得到a的值 
a = a - b; //和-a得到b的值

當a和b同號時,求和得到的結果及有可能出現越界溢位的情況。

2. 異或法:在運算過程中是將10進位制的數轉換成2進位制的數進行異或運算。可以完成對整型變數的交換,對於浮點型變數它無法完成交換。由於是按位異或,所以不存在溢位的情況。
異或真值表如下:

輸入a 運算子 輸入b 結果
1 ^ 0 1
1 ^ 1 0
0 ^ 0 0
0 ^ 1 1

異或運算口訣:相同為0,相異為1.
利用異或法處理的C語言程式碼如下:

#include <stdio.h>
int main(void)
{
    int a=1, b=2;
    a = a ^ b; // 01^10=11
    b = a ^ b; // 11^10=01
    a = a ^ b; // 11^01=10
}

3. 乘除法:可以處理整型和浮點型變數,但在處理浮點型變數時也存在精度損失的問題。而且乘除法相比加減法要多一條約束:b不能為0.

a = a * b; //求積
b = a / b; //積/b=a
a = a / b; //積/a=b

綜上所述,還是引入第三個變數進行資料的交換比較好,具有通用性,並且安全可靠,不存在後面幾種方法的缺陷(資料溢位,適用資料型別有限制等狀況)



該文章於2017年6月13日於CSDN上首次發表,2017年12月22日搬家至此!

相關文章