交换两个数的trick

刚刚在看一个参考资料的时候发现的,完全不需要临时变量来交换两个数字的值的方法,感觉自己又上了一课。

第一种方法很好理解,只要贴代码就好了,大概如下:

1
2
3
4
int a = 10, b = 5;
a = a + b; // a=15, b=5
b = a - b; // a=15, b=10
a = a - b; // a=5, b=10

看完有一种我的编程学瞎了的赶脚。。。

然而还有第二种,而且据说是在谭浩强的《C程序设计》一书中出现的:

1
2
3
4
int a = 10, b = 5;
a ^= b; // a = 1010, b = 0101 => a = 1111, b = 0101
b ^= a; // a = 1111, b = 0101 => a = 1111, b = 1010
a ^= b; // a = 1111, b = 1010 => a = 0101, b = 1010

博大精深大概就是这么来的。。。以后可以拿来当个trick写swap,名正言顺地说我这是in-place,一点extra空间都没用,除非出现极端值或者精度问题,嗯。。。

以上。
17-05-15
@Sturbridge