1、 通常我们通过设置临时变量来实现两个数的交换,如下:
(1)异或的意义:相同的两个数异或得0,不同的两个数异或得1;
(2)异或结论:将两个数异或的结果与其中一个数再异或,可以得到另一个数;
(3)例子:用异或交换两个数
12(001100)^ 34(100010)=101110(结果)
101110(结果) ^ 001100(12)=100010(34)
void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}
2、还可以通过异或来实现两个不同整数的交换,如下:
void swap(int &a,int &b){temp=a^b; //设a为临时变量,存储异或值b=temp^b; //相当于b=aa=temp^a; //相当于a=b
}a=a^b^a;//也可以不设置临时变量,因为异或值没有发生变化
b=a^b^b;
原理推导:
(1)异或的意义:相同的两个数异或得0,不同的两个数异或得1;
(2)异或结论:将两个数异或的结果与其中一个数再异或,可以得到另一个数;
(3)例子:用异或交换两个数
12(001100)^ 34(100010)=101110(结果)
101110(结果) ^ 001100(12)=100010(34)
101100(结果) ^ 100010(34)=001100(12)
3、还可以通过加减实现两个数的交换,前提是两个数的和不溢出,如下:
a = a + b;
b = a - b;
a = a - b;