一般我们交换两个变量的值,采用的方法都是设置一个临时变量,用于暂存变量的值,如下:
int tmp;
tmp = x;
x = y;
y = x;
当然也可以采用函数形式:
void exchage(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
采用位运算的方式可以提交代码的执行效率,通过^
异或运算符便可以巧妙地交换两个变量的值。
x = x ^ y;
y = x ^ y;
x = x ^ y;
下面我们做个简单的证明,为了方便理解,我们采用下标的方式区分新的x(y)和旧的x(y)。
x_1 = x_0 ^ y_0;
y_1 = x_1 ^ y_0 = (x_0 ^ y_0) ^ y_0 = x_0 ^ (y_0 ^y_0) = x_0 ^ 0 = x_0;
x_2 = x_1 ^ y_1 = (x_0 ^ y_0) ^ x_0 = y_0 ^ 0 = y_0;
这里x_2
和y_1
就是新的x
和y
了,用函数实现也是一样的道理,这里就不赘述了。