交换两个变量而不用临时变量

本文探讨了一种不使用额外变量直接交换两个整数的方法,通过位操作实现,同时指出需要注意的边界条件,如溢出问题,并提供了一个改进的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:  inline void Swap(int *a,int *b)

  2:  {

  3:      *a=*a+*b;

  4:      *b=*a-*b;

  5:      *a=*a-*b;

  6:  }

  是不是很有意思,真的没有用到其它的临时变量啊!那我们上面的结论1是不是错了呢?当然不是,为什么可以直接就可以交换了呢?还是用上面的例子来说,两个人交换苹果和桔子但是每人只有一个手,也不借助其它的容器,那如何进行哟?有办法,就只是用一个手拿两样东西,也就是说先将苹果(桔子)给另一个人用一只手拿着,再从他手上拿桔子(苹果)。基本也就是代码的意思了。

  结论2:看似不可能,但却可以的,要做的是仔细的去挖掘,多思考。

  那上面的代码是不是就没有问题了?有。要考虑溢出的问题,程序中有一个加法,很可能使结果超出范围,也就是说一只手要是拿不了一个苹果和桔子怎样办?

  要相信有问题是可以解决的,可以用assert等等方面处理一下,但不是最好,继续有如下的代码

  1:  inline void Swap(int *a, int *b)

  2:  {

  3:     *a ^= *b;

  4:     *b ^= *a;

  5:     *a ^= *b;

  6:  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值