【C语言】5种妙招教你轻松搞定变量值交换


本文摘自PHP中文网,作者little bottle,侵删。

C语言中交换两个变量值的操作经常会用到,也有不少人提问诸如不用临时变量怎么交换两个变量值的问题,今天我们在这里进行一个总结,一共有5种方法,希望大家看完有所收获。

1.临时变量法

方法解释:采用临时变量的方法,作为中间过渡,这是最简单也是大家最容易想到的方法,此法在各种场合应用极多,应该熟练掌握。

1

2

3

4

5

6

7

8

9

#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的结果可能越界。

1

2

3

4

5

6

7

8

9

#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.乘除交换法

方法解释:该方法与加减法类似,就是把加减替换为乘除,缺点是因为采用了乘法,因此比加法更容易越界,使用时应谨慎。

1

2

3

4

5

6

7

8

9

#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所以可以顺利完成交换,这种方法是很完美的,不存在越界的问题。

1

2

3

4

5

6

7

8

#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位,这种方法就会出错,此方法较复杂且容易出错,因此不建议大家使用。

1

2

3

4

5

6

7

8

9

10

#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;

 }

反思总结:
其实这五种方法从本质上分就三大类,一是临时变量,二是加减乘除运算,三是位运算。因为其各自优缺点的问题,我个人建议大家尽量使用临时变量法和异或交换法这两种,其中临时变量法在其他的地方也应用极多,大家重点掌握,就讲到这里吧,谢谢大家。

相关教程:C语言教程

以上就是【C语言】5种妙招教你轻松搞定变量值交换的详细内容!

相关阅读 >>

C语言中%d,%s,%x,%f,%.100的意义

C语言如何求n个数的平均值?

三分钟了解C语言中自定义的标识符及规则

C语言\n什么意思?

C语言中二维数组在内存中的存放顺序是什么

C语言中如何用do...while语句求1到100的累加和

C语言常量定义规则

printf("\n")是什么意思?

C语言中,char型数据是以什么形式存储的?

C语言数组冒泡排序是如何实现的?

更多相关阅读请进入《C语言》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...