您好,登錄后才能下訂單哦!
寫在前面:
C語言中交換兩個變量值的操作經常會用到,也有不少人提問諸如不用臨時變量怎么交換兩個變量值的問題,今天我們在這里進行一個總結,也算是對這個問題的統一回復,我一共總結了5種方法(名字都是我自己取的,不當之處還請批評指正),希望大家看完有所收獲。
1.臨時變量法
方法解釋:采用臨時變量的方法,作為中間過渡,這是最簡單也是大家最容易想到的方法,此法在各種場合應用極多,應該熟練掌握。
#include<stdio.h>
int main(void)
{
int a=1,b=2,tmp;
tmp =a;
a=b;
b=tmp;
printf("%d %d",a,b);
return 0;
}
2.加減交換法
方法解釋:顧名思義,使用數學中的加減法進行交換,先把a+b的結果暫時先保存在變量a中,然后通過這改變后的a和原始的b進行減法就可以得到交換后的b,缺點是a+b的結果可能越界。
#include<stdio.h>
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.乘除交換法
方法解釋:該方法與加減法類似,就是把加減替換為乘除,缺點是因為采用了乘法,因此比加法更容易越界,使用時應謹慎。
#include<stdio.h>
int main(void)
{
int a=1,b=2;
a = a * b;
b = a / b;
a = a / b;
printf("%d %d",a,b);
return 0;
}
4.異或交換法
方法解釋:巧妙使用異或運算來進行交換,這種方法主要利用了異或的特性a^b的值先保存到a,因為a^b^b=a所以可以順利完成交換,這種方法是很完美的,不存在越界的問題。
#include<stdio.h>
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.移位交換法
方法解釋:這種方法不太常用,原理是把原來的int類型的a的值拆分成高16位和低16位,相當于多了16位的暫存空間可以周轉,缺點是如果a或者b超過了16位,這種方法就會出錯,此方法較復雜且容易出錯,因此不建議大家使用。
#include<stdio.h>
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;
}
反思總結:
其實這五種方法從本質上分就三大類,一是臨時變量,二是加減乘除運算,三是位運算。因為其各自優(yōu)缺點的問題,我個人建議大家盡量使用臨時變量法和異或交換法這兩種,其中臨時變量法在其他的地方也應用極多,大家重點掌握,就講到這里吧,謝謝大家。
**加C/C++學習交流群獲取C語言、C++、Windows高級編程,MFC框架編程、QT框架編程,大型企業(yè)實戰(zhàn)項目。Linux應用程序開發(fā),Linux內核研究等多個知識點高級進階干貨的直播免費學習權限 都是大牛帶飛 讓你少走很多的彎路的 群...號是 546912356
注:加群要求
1、零基礎,目前遇到困難不知從何下手可以加。
2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。
3、基礎非常扎實,但對目前主流技術欠缺,需要突破技術瓶頸的可以加。
4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續(xù)突破的可以加。
5.企業(yè)一線C/C++高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!**
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。