第一种方法、使用异或交换变量
1、异或^ 的性质
1.a∧b,两个数相同等于0,两个数不同则等于1:0^N=N,N^N=0
2.a∧b∧c 异或可以随便交换位置。交换律、结合律:a^b=b^a,a^b^c=a^(b^c)
3.同一样的一批数进行异或,和谁先谁后无关,只要是同一批数进行异或结果是一样的。
2、代码实现:交换两个变量
缺点:连两个变量不能在同一片内存中。
int a = 10;
int b = 2;
// 第二次 b会等于 a^b^b,由于异或的性质,交换律和结合律,和相同的为0,不同的为1,b^b会等与0,所以第二次会等a
// 第三次 a会等于 a^a^b^b^b 所以a 会等于b,因为a^a和b^b会等于0,就只剩下一个b
// 同一样的一批数进行异或,和谁先谁后无关,只要是同一批数进行异或结果是一样的,所以就交换了a和b的值
a = a^b; // 8 // a = 8 // a=a^b
b = a^b; // 10 // b = 8 ^ 2 // b=a^b^b
a = a^b; // 2 // a = 8 ^ 10 // a=a^b^a^b^B
第二种方法:使用数学的方法,和上面的相识。
a = a + b;
b = a - b; //b=a+b-a
a = a - b; //a=a+b-a