如何交換變量a和變量b的值?
方法一:引入第三個變量
這種方法比較常用,同時適用各種數(shù)據(jù)類型伙单。以C語言代碼為例,介紹如下:
int a=1, b=2;
int temp; //引入臨時變量
temp = a;
a = b;
b = temp;
方法二:不引入第三個變量
這種方法比較少見哈肖,并且對于不同的數(shù)據(jù)類型處理方式不一樣吻育。筆者整理了三種處理方式,介紹如下:
1. 加減法:該方法可以交換整型和浮點型數(shù)值的變量淤井,但在處理浮點型的時候有可能出現(xiàn)精度的損失布疼。
a = a + b; //求和
b = a - b; //和-b得到a的值
a = a - b; //和-a得到b的值
當(dāng)a和b同號時,求和得到的結(jié)果及有可能出現(xiàn)越界溢出的情況币狠。
2. 異或法:在運算過程中是將10進(jìn)制的數(shù)轉(zhuǎn)換成2進(jìn)制的數(shù)進(jìn)行異或運算游两。可以完成對整型變量的交換漩绵,對于浮點型變量它無法完成交換贱案。由于是按位異或,所以不存在溢出的情況止吐。
異或真值表如下:
輸入a | 運算符 | 輸入b | 結(jié)果 |
---|---|---|---|
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
綜上所述肴沫,還是引入第三個變量進(jìn)行數(shù)據(jù)的交換比較好粟害,具有通用性蕴忆,并且安全可靠,不存在后面幾種方法的缺陷(數(shù)據(jù)溢出悲幅,適用數(shù)據(jù)類型有限制等狀況)
附
該文章于2017年6月13日于CSDN上首次發(fā)表套鹅,2017年12月22日搬家至此站蝠!