几种值交换的方法:
说到值交换,当值交换被封装在一个函数里面的时候,大学教材上有一种较原始的方法,就是使用一个中间变量并且使用值引用来达到交换的目的。但在这里,可以get到另外的实现方法。
下面有三种:分别是中间变量-加减运算-异或运算
实现程序如下:
/*使用中间变量Temp*/
void swap1(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
/*使用加减运算*/
void swap2(int &a, int &b)
{
a = a + b;
b = a - b;
a = a - b;
}
/*使用异或运算*/
void swap3(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
第一种使用中间变量的方式是我们立即可以想到的,当被要求到不能使用中间变量的时候,后两种就派上用场了。
第二种使用简单的加减运算来实现交换目的,做运算的时候可能会面临数据溢出的情况,因为在32位平台下,int占4个字节,其范围是-2147483648---2147483648,故2147483648+1就变成了-2147483648,但在一定范围内可以采用。
第三种采用按位异或的方式来实现交换目的,将参与运算的两数各自对应的二进制位进行异或运算,相同为0,不同为1,运算三次即可达到目的,相比于第二种方式,此种方式更好。