font.conf

阅读全文

用一行代码交换a和b的值

转自 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));