提到交换两个数的值,通常我们会想到使用一个变量记录。比如:
int a = 10;
int b = 5;
// 交换a和b的值
int c = a;
a = b;
b = c;
这样其实会创建一个多余的变量。
那么有没有方法,不使用变量就可以交换两个数呢?
普及知识
^:异或运算符
性质:
1、0^n=n、n^n=0
2、符合交换律【a ^ b = b ^ a】
3、符合结合律【(a ^ b) ^ c = a ^ (b ^ c)】
通过异或我们就可以交换两个数,如下:
int a = 10;
int b = 5;
// 交换两个数
a = a ^ b; (1
b = a ^ b; (2
a = a ^ b; (3
证明:
(1) 中 a 和 b 的值分别是:
a = 10 ^ 5;
b = 5;
(2) 中 a 和 b 的值分别是:
a = 10 ^ 5;
b = 10 ^ 5 ^ 5 = 10 ^ 0 = 10
(3) 中 a 和 b 的值分别是:
a = 10 ^ 5 ^ 10 = 10 ^ 10 ^ 5 = 0 ^ 5 = 5
b = 10
由上可得 a = 5 ; b = 10 成功交换
注:交换两个数时,不能使用同一块内存空间(两个对象不能相同),如果为同一块内存结果则会为0。