交换两个整数

来源:互联网 发布:中越战争伤亡对比知乎 编辑:程序博客网 时间:2024/05/18 18:42

今天写程序的时候回想起曾经好像在那见过没有使用中间变量进行两个整数的交换,马马虎虎地记得那时通过加减法来实现的,所以就查了一下资料,果然存在这这种方法,代码如下:

void swap1 (int& x,int& y){             x=x+y;             y=x-y;             x=x-y;}

void swap2 (int &x,int &y){             x=x-y;             y=x+y;             x=y-x;}


但是,上述两种方法也存在各自的缺陷,对于swap1函数来说,如果x和y两个数是同号的话,会导致溢出;对于swap2函数来说,如果x和y是异号的话,也会导致溢出。


通过查找资料发现还有一种方法交换两个整数的方法,同样也是不使用中间变量,使用使用异或操作(相同位为0,不同位为1),代码如下:


void swap3 (int& x,int& y){             x ^= y;             y ^= x;             x ^= y;}


讨论了以上不同的情况的代码,下面将上述代码进行整理,使代码的跟完美:


void swap4 (int &x,int &y){             if(x==y)             return ;             if((x>0&&y>0)||(x<0&&y<0))      {             x=x-y;     y=x+y;                  x=y-x;             }             else            {             x=x+y;             y=x-y;             x=x-y;             }}

void swap5 (int &x,int &y){             if(x==y)             <span style="white-space:pre"></span>return;             x^=y;             y^=x;             x^=y;}


参考资料
0 0
原创粉丝点击