怎样写swap(x , y)函数?两值交换的几种方法简介

1. 利用第三方临时变量:

temp = x ;

x = y ;

y = temp;

   为了避免在更新值时旧值被覆盖掉,先将x的旧值赋给“temp”,从而实现x与y的值交换。

 

2. 利用加减法的性质:

x = x + y ;  //此时x是两值之和,y仍是y的旧值,也即并没有出现信息损失,因为x的旧值可由计算得出

y = x - y ; // “两值之和”减去“y的旧值” 得 “x的旧值” , 存入y,完成第一步交换

x = x - y ; // “两值之和”减去“x的旧值” 得 “y的旧值” , 存入x,完成第二步交换。

 

3. 利用位异或运算的性质:

x = x ^ y ;

y = x ^ y ;

x = x ^ y ;

  位的异或运算,符号为“^”,指在二进制表示法中,按照数位进行的一种运算。运算规则为:对两组数,严格不等的数位值取1,同0或同1的数位值取0.

  如:a = 0011 ; b = 0111 ; a ^ b = 0100  ; //a和b仅第二位的值严格不等,故取1,其他数位皆取0.

因为位异或运算是一种可逆运算,故可以用来实现两值交换。

依上例,

a = a ^ b  ; //  a = 0100

b = a ^ b ; // b = 0011 是a的旧值

a = a ^ b ; // a = 0111 是b的旧值

为什么呢?其实综合第一行和第二行,可得 b = a ^ b ^ b ; 再利用异或运算性质——一个数与自己异或得0 ; 0与任意数异或后不改变其值 。就可以发现此时 b = a 了。同理,第三行是 a = (a ^ b) ^ (a ^ b ^ b) = a ^ b ^ a = b ;

 

内容来源:菜鸟教程C++传值调用评论区

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值