语句 a = a ^ b 在 C++ 中如何工作?
How does the statement a = a ^ b work in c++?
在某些语言中... 我知道这是用作指数运算符。
但在下面的 C++ 代码中,我相信这是用来交换 char &a
和 char &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
只需将上面的列表应用到每一位即可。
在某些语言中... 我知道这是用作指数运算符。
但在下面的 C++ 代码中,我相信这是用来交换 char &a
和 char &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
只需将上面的列表应用到每一位即可。