C語(yǔ)言
寫在前面:
C語(yǔ)言中交換兩個(gè)變量值的操作經(jīng)常會(huì)用到,也有不少人提問(wèn)諸如不用臨時(shí)變量怎么交換兩個(gè)變量值的問(wèn)題,今天在這里做一個(gè)總結(jié),也算是對(duì)這個(gè)問(wèn)題的統(tǒng)一回復(fù),一共總結(jié)了5種方法(名字都是我自己取的,不當(dāng)之處還請(qǐng)批評(píng)指正),希望大家看完有所收獲。
1.臨時(shí)變量法
方法解釋:采用臨時(shí)變量的方法,作為中間過(guò)渡,這是最簡(jiǎn)單也是大家最容易想到的方法,此法在各種場(chǎng)合應(yīng)用極多,應(yīng)該熟練掌握。
#include
int main(void)
{
int a=1,b=2,tmp;
tmp =a;
a=b;
b=tmp;
printf("%d %d",a,b);
return 0;
}
2.加減交換法
方法解釋:顧名思義,使用數(shù)學(xué)中的加減法進(jìn)行交換,先把a(bǔ)+b的結(jié)果暫時(shí)先保存在變量a中,然后通過(guò)這改變后的a和原始的b進(jìn)行減法就可以得到交換后的b,缺點(diǎn)是a+b的結(jié)果可能越界。
#include
int main(void)
{
int a=1,b=2;
a = a + b;
b = a - b;
a = a - b;
printf("%d %d",a,b);
return 0;
}
3.乘除交換法
方法解釋:該方法與加減法類似,就是把加減替換為乘除,缺點(diǎn)是因?yàn)椴捎昧顺朔?,因此比加法更容易越界,使用時(shí)應(yīng)謹(jǐn)慎。
#include
int main(void)
{
int a=1,b=2;
a = a * b;
b = a / b;
a = a / b;
printf("%d %d",a,b);
return 0;
}

小編給大家推薦一個(gè)學(xué)習(xí)氛圍超好的地方,C/C++交流企鵝裙:【870+963+251】適合在校大學(xué)生,小白,想轉(zhuǎn)行,想通過(guò)這個(gè)找工作的加入。裙里有大量學(xué)習(xí)資料,有大神解答交流問(wèn)題,每晚都有免費(fèi)的直播課程
4.異或交換法
方法解釋:巧妙使用異或運(yùn)算來(lái)進(jìn)行交換,這種方法主要利用了異或的特性a^b的值先保存到a,因?yàn)閍^b^b=a所以可以順利完成交換,這種方法是很完美的,不存在越界的問(wèn)題。
#include
int main(void)
{
int a=1,b=2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("%d %d",a,b);
return 0;
}
5.移位交換法
方法解釋:這種方法不太常用,原理是把原來(lái)的int類型的a的值拆分成高16位和低16位,相當(dāng)于多了16位的暫存空間可以周轉(zhuǎn),缺點(diǎn)是如果a或者b超過(guò)了16位,這種方法就會(huì)出錯(cuò),此方法較復(fù)雜且容易出錯(cuò),因此不建議大家使用。
#include
int main(void)
{
int a=1,b=2;
a <<= 16;
a |= b;
b = a >> 16;
a = a & 0xffff;
printf("%d %d",a,b);
return 0;
}
反思總結(jié):其實(shí)這五種方法從本質(zhì)上分就三大類,一是臨時(shí)變量,二是加減乘除運(yùn)算,三是位運(yùn)算。因?yàn)槠涓髯詢?yōu)缺點(diǎn)的問(wèn)題,我個(gè)人建議大家盡量使用臨時(shí)變量法和異或交換法這兩種,其中臨時(shí)變量法在其他的地方也應(yīng)用極多,大家重點(diǎn)掌握,就講到這里吧,謝謝大家。