交换两个数最常用的是借助第三个变量来实现,或者借助其它数据结构(其实也就是借助第三方来实现暂存数据)。那么如何不借助第三方实现交换两个数据呢?
原理:假如a = 5, b = 7;那么ab大小差2。已知一个变量的值,通过与另外一个变量的差值就可以知道另外的值。
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 条评论) |