C语言各类数值交换函数优缺点分析——学习笔记

本文分析了三种C语言中交换数值的方法:临时变量法、加法运算法和位运算异或法。临时变量法虽稳妥但占用额外空间;加法运算法可能导致溢出和特定情况下的错误结果;位运算法高效且无溢出,但对特定情况同样有误操作风险。总结推荐使用临时变量法,但注意其空间消耗。
摘要由CSDN通过智能技术生成

方法一

利用临时变量来交换

void swap(int *x1,int *x2){
     int temp=*x1;
     *x2=*x1;
     *x1=temp;
}

优点:稳妥

缺点:用了临时变量,占用了空间

 

方法二

利用加法(或减法)来交换,也可以用乘法来实现,但是除法不行(除法可能会产生小数,小数转整型会导致数值丢失)

void swap(int *x1,int *x2){
     *x1=*x1+*x2;
     *x2=*x1-*x2;
     *x1=*x1-*x2;
}

优点:不用额外空间

缺点:1、会有数值过大造成溢出的风险

           2、当x1,x2指向同一内存空间时,返回的 *x1==*x2==0(可以自行推导下为什么)

 

方法三

利用位运算(异或^)来交换

void swap(int *x1,int *x2){
     *x1=*x1^*x2;
     *x2=*x1^*x2;
     *x1=*x1^*x2;
}

优点:位运算计算效率高,数值不会溢出,也不占用额外空间

缺点:当x1于x2指向同一内存空间时,返回的 *x1==*x2&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值