不借助第三个变量交换两个变量值的方法
1)使用加法
a = a + b
b = a - b
a = a - b
2)使用异或运算
a = a ^ b
此时, a的位模式指示了a,b在那些位上是相同的(为0的那些位), 哪些位上是不同的(为1的那些). 而我们仍持有b的值, 所以a,b的值我们都还是知道的.
b = a ^ b
因为: 0不论和什么值异或, 结果都是那个值; 1不论和什么值异或, 其值都是那个值取反. 上一步后, a已经指示了a,b每个位的差异, 所以, 这一步是保留b中和1一样的位(这些位在现在的a中是0), 而将和a不同的位取反(这些位在现在的a中是1). 这步过后, b就被赋予原来a的值.
a = a ^ b
同理, 上一步后b已经是最开始时a的值, a仍然是指示a,b位差异的, 所以它们异或, 就得到了原来b的值.