Question:现有两个int型变量a, b如何才能交换他们的值呢?
对于普通青年来说,按照课本的方法我们需要增加一个临时变量tmp,通过
tmp = a;
a = b;
b = tmp;
来完成交换。
可是我们是否能够不使用临时变量呢?
答案是肯定的,请看下面代码
a^=b;
b^=a;
a^=b;
如果我们使用异或的方法我们是可以不使用临时变量来交换两个数的值。
我来解释一下为什么能这样做。
两个int型数的异或是按照其二进制位对应的位进行异或
我们假设初始的a和b分别为a(0011)和b(0101) [这样就有00,01,10,11四种不同的异或情况]
执行第一条语句后:
a(0011)
b(0101)
a(0110)
执行第二条语句后:
b(0101)
a(0110)
b(0011)
执行第三条语句后:
a(0110)
b(0011)
a(0101)
显然我们通过3次异或使得a和b的值进行了交换,因为每一位通过这样的异或都能达到交换的目的
所以我们两个数通过这样的异或同样能够达到交换的目的,这样就能不使用临时变量了。