用一行代码交换a和b的值
etw0
posted @ 2009年3月31日 17:31
in programming
with tags
Programming ; Misc ;
, 1068 阅读
转自 http://cookinglinux.cn/one-line-change-a-and-b.html
直接这样问你,你可能一时想不到答案,不过我们可以把问题拆分出来看。
现有两个变量a与b,请用代码实现a与b的值相互交换。
你肯定会说,这是一个简单得不能再简单的问题了,使用一个中间变量tmp直接进行交换就行了。高级一点就使用指针交换。
那好,如果要求你不允许使用tmp变量就进行交换,你会怎么做?
我唯一想到的就是把a”藏”在b里边,就像这样:
a += b;
b = a - b;
a -= b;
可能你更喜欢异或:
a ^= b;
b ^= a;
a ^= b;
离答案越来越近了,现在要求你,只用一行代码交换a,b的值。
可以使用替换法,就像这样:
a -= (b = (a += b) - b);
a ^=(b ^= (a ^= b));