在不借助中间变量的前提下,交换两个变量的值

借助中间变量,可以很方便的交换两个变量的值。如果不借助中间变量,同样可以达到交换变量的目的。

数值相加减进行交换

int a = 10;
int b = 12;
a = b - a;	//a = 2, b = 12
b = b - a;	//a = 2, b = 10
a = b + a;	//a = 12,b = 10

这种方法的原理是,把a和b看做数轴上的点,围绕两点间的距离进行计算。
具体过程:

  • a = b - a计算出了a和b两点之间的距离,并将其保存在a中。
  • b = b - a计算出了a到原点的距离,并将其保存在b中。
  • a = b + a计算出了b到原点的距离,并将其保存在a中。

这种方法的缺点在于只能用于数字类型,字符串类型不可以。而且a+b可能超出int的范围。

位移运算进行交换

int a = 10;
int b = 12; 	//a=1010^b=1100;
a = a ^ b; 		//a=0110^b=1100;
b = a ^ b; 		//a=0110^b=1010;
a = a ^ b; 		//a=1100=12;b=1010;

这种方法,原理在于异或运算的特点,通过异或运算能够使得数据中的某些位翻转,其他位不变。
这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。

不利用临时变量,交换两个变量的值

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值