按位异或实现2个数据的交换的理解

我们都知道通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:

    a=10100001,b=00000110

    a=a^b;   //a=10100111

    b=b^a;   //b=10100001

    a=a^b;   //a=00000110

这段代码该怎么去理解呢?我们可这样去理解,比如我们可以增加一个变量c,c = a^b。我们可以很容易的发现a,b,c任意2个取异或会得到另一个数。

那么上面这一段代码就很好理解了。

a = a^b = c

b = b^c =a(初始值的a)

a = a^b =c^a(初始值的a) = b(初始值的b)。  

posted on 2012-08-03 16:55  zmmr  阅读(534)  评论(2编辑  收藏  举报