我读到可以使用下面的单个语句交换三个变量a,b和c: c = a ^ b ^ c ^(a = b)^(b = c)
同样,两个变量a和b可以交换为: a = a ^ b ^(b = a)
有人可以解释一下这是如何工作的?
P.S。这是链接说的。 http://p--np.blogspot.ro/2011/04/reverse-linked-list-using-only-2.html
答案 0 :(得分:1)
您只需要在原始陈述中进行所有作业(除了您要更改的作业除外)的反对:
a = a ^ b ^ c ^ (b=c) ^ (c=a);
您指定c=a
,b=c
。它们的返回值分别为a
和c
,因此,您希望" counter" a
和c
,您使用a^a == 0
和c^c == 0
的事实,并在开头添加一个,c。
另外,您添加了b
,以将a
分配给b
的值。
请注意,正如评论中所讨论的,如果保证上述成功与否,则它取决于语言。在Java中,例如 - it is:The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.
,而在其他方面,例如C,则不是。