众所周知,在进行排序操作的时候,交换数组中对应索引的值是排序的元操作,但是见过很多的swap函数都是引入第三个临时变量来完成交换操作(如下面这一小段例程所示): 
swap_int (v 1.0)
void swap_int(int &a, int &b)
{
        int tmp;
        tmp    = -1;
        tmp    = *a;
        *a     = *b;
        *b     = tmp;
}
但是能不能不引进临时变量实现交换呢?感谢Boolean Algebra,注意到异或 ^ 运算的两条性质:
1. a ^ a = 0;
2. a ^ 0 = a;
受到这个性质的启发就可以尝试重构我们的swap_int算法(v 2.0)实现:
swap_int (v 2.0)
void swap_int(int &a, int &b)
{
        *b = *a ^ *b;
        *a = *a ^ *b;
        *b = *a ^ *b;
}
Ok,是不是可以了呢?但是不要认为减少了一个临时变量的算法性能会提高,事实上上面的v 2.0 实现性能并没有提高,这段小程序的实现的价值只是提供另外一种用Boolean Algebra进行运算思考的方式。