题目:只用两个变量,如何做到把两个整数交换?
一般正常没有限制,我们用三个变量,是这样做的。
这个学过一点点C或者编程语言的都会,这里用到了三个变量。那么只用两个变量,如何做呢?、
答案是 “异或” “^”
首先理解什么是 异或 运算? 把两个数转化为二进制,两个数一个为0 一个为1 的时候 结果才为1 其余结果为0
所以对于 异或 我们会发现以下运算规律
一个数和本身进行 异或 运算结果为 0
一个数和0 进行异或运算 结果 还是他本身
两个相同的数进行异或,结果为: 0
任意数和0进行异或,结果为: 本身
回到这个问题来。
假设两个数为a,b. 我们只要把 a 和 b进行异或运算 (a^b) 在任意和原来的a 进行异或运算(a^b^a=b^0=b) 或者和原来的b进行异或运算(a^b^b=a^0=a)就可以得到b .按照这个思路就可以用两个变量完成
//面试题: 要求不能使用第3个变量 把两个整数进行交换
int a=120;
int b=11;
a = a^b;
b = a^b; //此时b就是原来的a 了 120 (a^b)^b ==> a^(b^b) ==> a^0 ==> a
a = a^b; //这就是真正的 a^b^a 就是原来的b 了 11 (a^b)^a ==> b^(a^a) ==> b^0 ==> b
下图是交换的整个过程