不借助第三个变量交换两个变量值的方法

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的值.

posted @ 2014-03-04 13:36  shenmeyisi  阅读(259)  评论(0编辑  收藏  举报