语句 a = a ^ b 在 C++ 中如何工作?

How does the statement a = a ^ b work in c++?

在某些语言中... 我知道这是用作指数运算符。 但在下面的 C++ 代码中,我相信这是用来交换 char &achar &b 的。我希望了解表面之下发生的事情,以及如果确实按照我的想法行事,此声明将如何工作。

void  swap ( char  & a ,  char  & b ) { 
a  =  a ^ b ; 
b  =  a ^ b ; 
a  =  a ^ b ; 
}

关于异或,你需要知道一些事情:

X^X=0
X^1= not X
X^0=X
X^Y=Y^X

现在

a=a^b
b=a^b=a^b^b=a
a=a^b=a^b^a=a^a^b=b

正如您所说,现在可以看到,最后 a 得到 b 的值,b 得到 a 的值。

先从一点开始,看看所有可能的情况:

a 0 0 1 1

b 0 1 0 1

在第一个语句之后:

一个 0 1 1 0

b 0 1 0 1

秒:

一个 0 1 1 0

b 0 0 1 1

第三名:

一个 0 1 0 1

b 0 0 1 1

只需将上面的列表应用到每一位即可。