交换两个变量值,老话题,下面总结的各种方法是。

为了方便,首先定义两个变量。


int a = 1;
int b = 2;


一 借助暂时变量

1 交换变量值

int tmp;
tmp = a; // tmp = 1
a = b; // a = 2
b = tmp; // b = 1



2 交换地址

int *p;   
p = &a; // tmp->1
a = &b; // a->2
b = p; // b ->1



二 不借助第三个变量

1 加减法

a = a + b // a = 3
b = a - b // b = 1
a = a - b // a = 2


2 乘除法

a = a * b // 2
b = a / b // 2
a = a / b // 1



3 异或法

// a:0000 0001
// b:0000 0010
a = a ^ b // a:0000 0011
b = a ^ b // b:0000 0001
a = a ^ b // a:0000 0010



对于上面各种方法,中间变量须要额外的内存空间。

加减法和乘除法有可能出现越界,或者被除数为0的情况,并且仅仅适用于数字运算;