C语言问题

#define f(x,y) (x^=(y^=(x^=y)))
交换x,y的值
这是什么原理啊?

第1个回答  2011-09-23
这是利用了异或运算的“记忆”功能实现的。
主要利用了两个性质:
1. A异或B异或B = A
2. A异或B = B异或A

然后列表展开表达式(x^=(y^=(x^=y)))即可:
X Y
x异或y y ........(x^=y)
x异或y x异或y 异或 y = x -------(y^=(x^=y))
x异或y异或x = y x ------------------------------ (x^=(y^=(x^=y)))
y x------------------------------最后结果
第2个回答  2011-09-23
这个式子x^=(y^=(x^=y))等价于:
x = x ^ y;
y = y ^ x;
x = x ^ y;
将x和y的值用二进制标识,通过异或运算,实现x和y的互换。
例如:x = 3(二进制四位:0011) y = 4 (0100)
x = x ^ y; 相当于0011与0100之间异或的值 结果为0111 即 x = 7
y = y ^ x; 相当于0100与0111之间异或的值 结果为0011 即 y = 3
x = x ^ y; 相当于0111与0011之间异或的值 结果为0100 即 x = 4

以上就是x和y互换的原理,希望可以帮助你理解。本回答被提问者采纳
第3个回答  2011-09-23
#define f(x,y) (x^=(y^=(x^=y)))
^是按位取反运算符 x^x=0, y^y=0
赋值运算是至右向左运算的则
上位讲解很细我就不再多说了
第4个回答  2011-09-23
可以简化分为如下几步,说真的原理还真不知道,下面解释应该算是经验吧。
X1 = X ^ Y;
Y1 = X1 ^ Y; 带入X1,则Y1 = (X ^ Y) ^ Y;
如果X与Y相同则X^Y为
则Y=X;X^Y=~X;
则(~X)^X = X带入值进去都为X,
如果X与Y不同则为 X^Y=1,
则Y=~X(X取反);
则1^(~X),带入X值进去都是为X
X2 = X1 ^ Y1; 带入Y1,则X2 = (X ^ Y) ^ X 则跟上同
第5个回答  2011-09-23
#define f(x,y) (x^=(y^=(x^=y)))

(x^=(y^=(x^=y)))
注意运算顺序

可以这么理解
a = x^y
x=a
b = y^a
y = b
==> y = y^a=y^x^y=y^y^x=0^x=x
c = x^b
x=c=x^b=x^y^a=a^y^a = a^a^y = y

注: x^x=0 y^y=0 a^a=0
相似回答