C++交换两个数的值
需要临时变量
(1).使用引用(引用即别名)
void swap1(int &a, int &b)
{
int k;
k = a;
a = b;
b = k;
}
函数时的格式:swap1(x,y)
(2). 指针
void swap2(int *a, int *b)
{
int k ;
k = *a;
*a = *b;
*b = k;
}
调用该函数时的格式:swap2(&x,&y)
2.不需要临时变量
(1).假如 a = 3,b = 4。想将a和b的值互换,可以用一下赋值语句实现:
有一个陷阱:
int swap(int * a,int * b){
if(a==b)//需要加入判断a指针与b指针相同的情况(细节)
return -1;
a = a ^ b;
b = b ^ a;
a = a ^ b;
return 0;
}
下面用竖式进行简单说明:(10进制化为二进制)
a = 011
(^) b = 100
则 a = 111(a ^ b的结果赋值给a,a已变成了7)
(^) b = 100
则 b = 011(b^a的结果赋给b,b已经变成了3)
(^) a = 111
则 a = 100(a^b的结果赋给a,a已经变成了4)
(2).
a = a + b;
b = a - b;
a = a - b;
总结:位运算比加减快,当然任何互逆的运算都是可以的。