使用xor在一行中交换三个数字

时间:2014-05-19 07:35:39

标签: algorithm xor

我读到可以使用下面的单个语句交换三个变量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

1 个答案:

答案 0 :(得分:1)

您只需要在原始陈述中进行所有作业(除了您要更改的作业除外)的反对:

a = a ^ b ^ c ^ (b=c) ^ (c=a);

您指定c=ab=c。它们的返回值分别为ac,因此,您希望" counter" ac,您使用a^a == 0c^c == 0的事实,并在开头添加一个,c。
另外,您添加了b,以将a分配给b的值。

Here is a demo on ideone

请注意,正如评论中所讨论的,如果保证上述成功与否,则它取决于语言。在Java中,例如 - it isThe Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.,而在其他方面,例如C,则不是。