不借助第三个变量实现两个值的交换

阅读: 评论:0

不借助第三个变量实现两个值的交换

不借助第三个变量实现两个值的交换

不借助第三个变量实现两个值的交换

交换两个数最常用的是借助第三个变量来实现,或者借助其它数据结构(其实也就是借助第三方来实现暂存数据)。那么如何不借助第三方实现交换两个数据呢?

方法一:利用两个值的差值来实现

原理:假如a = 5, b = 7;那么ab大小差2。已知一个变量的值,通过与另外一个变量的差值就可以知道另外的值。

  1. 可以先让a暂存与b的差值,a = b - a;a = 2;
  2. 然后将a的值赋值给b,b = b - a;b = 5;
  3. 最后在利用差值将b赋值给a;a = b + a;a = 7;
template <typename T>
void swapTwo(T &a, T &b)
{a = b - a;b = b - a;a = b + a;
}

方法二:位运算异或

原理:对与整型值,都是二进制值,比如5是0101,7 是0111。5和7异或,只有在两个比较的位不同时其结果是1,否则结果为0,所以5^7 => 0101 ^ 0111 = 0010。对于异或有个特点就是,一个数连续异或两个相同的数那么值等于它本身。5 ^ 7 ^ 7 => 0010 ^ 0111 = 0101 = 5。

template <typename T>
void swapTwo(T &a, T &b)
{a = a ^ b;b = a ^ b; // 等价于b = a ^ b ^ b = aa = a ^ b; // 等价于a = a ^ b ^ a = b
}

本文发布于:2024-02-01 22:01:15,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679607439695.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:第三个   变量   两个
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23