面试经典--不用中间变量交换两个整数的值
在网上搜了大概有四种办法:
用下面的程序验证一下:
void swap1(int &a,int &b)
{
a=a+b;
b=a-b;
a=a-b;
return;
}
void swap2(int &a,int &b)
{
a=a-b;
b=a+b;
a=b-a;
}
/*swap3 很经典*/
void swap3(int &a,int &b)
{
a^=b;
b^=a;
a^=b;
/*等效的一句话操作是:
a^=b^=a^=b;
*/
}
/*swap4 ,最精炼*/
void swap4(int &a,int &b)
{
b=a^b^(a=b);
}
int main(int argc, char const *argv[])
{
int a=3;
int b=4;
printf("Before swap,a=%d ,b=%d\n",a,b );
swap1(a,b);
printf("After swap1,a=%d ,b=%d\n",a,b );
swap2(a,b);
printf("After swap2,a=%d ,b=%d\n",a,b );
swap3(a,b);
printf("After swap3,a=%d ,b=%d\n",a,b );
swap4(a,b);
printf("After swap4,a=%d ,b=%d\n",a,b );
return 0;
}
输出结果证明解法有效:
但是需要注意的是,第一、二种方法有溢出威胁,第三、四种方法不适用与浮点数。