今天写程序的时候回想起曾经好像在那见过没有使用中间变量进行两个整数的交换,马马虎虎地记得那时通过加减法来实现的,所以就查了一下资料,果然存在这这种方法,代码如下:
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;
}
通过查找资料发现还有一种方法交换两个整数的方法,同样也是不使用中间变量,使用使用异或操作(相同位为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;
}

本文介绍了三种不使用中间变量实现整数交换的方法:加减法、异或操作,并讨论了每种方法的潜在溢出问题。最后,提出了一种综合考虑溢出情况的改进方案。
677

被折叠的 条评论
为什么被折叠?



