十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
写在前面:
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的广饶网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!C语言中交换两个变量值的操作经常会用到,也有不少人提问诸如不用临时变量怎么交换两个变量值的问题,今天我们在这里进行一个总结,也算是对这个问题的统一回复,我一共总结了5种方法(名字都是我自己取的,不当之处还请批评指正),希望大家看完有所收获。
1.临时变量法
方法解释:采用临时变量的方法,作为中间过渡,这是最简单也是大家最容易想到的方法,此法在各种场合应用极多,应该熟练掌握。
#include
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
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
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
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
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;
}
反思总结:
其实这五种方法从本质上分就三大类,一是临时变量,二是加减乘除运算,三是位运算。因为其各自优缺点的问题,我个人建议大家尽量使用临时变量法和异或交换法这两种,其中临时变量法在其他的地方也应用极多,大家重点掌握,就讲到这里吧,谢谢大家。
**加C/C++学习交流群获取C语言、C++、Windows高级编程,MFC框架编程、QT框架编程,大型企业实战项目。Linux应用程序开发,Linux内核研究等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走很多的弯路的 群...号是 546912356
注:加群要求
1、零基础,目前遇到困难不知从何下手可以加。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。
3、基础非常扎实,但对目前主流技术欠缺,需要突破技术瓶颈的可以加。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。
5.企业一线C/C++高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!**
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。