^ =运算符在世界上做什么?

Vol*_*rix 1 c# permutation operators

我正在研究一个排列代码并试图理解它是如何做的,但是一个操作让我感到茫然:^=.Google不会让我搜索这些字符,所以任何人都可以告诉我它在做什么,这个运算符是什么意思?你可以在下面看到它的一个例子.谢谢!

private void swap(ref char a, ref char b)
{
    if (a == b)
        return;
    a ^= b;
    b ^= a;
    a ^= b;
}
Run Code Online (Sandbox Code Playgroud)

VMA*_*Atm 5

来自MSDN:
表单的表达式

x ^= y
Run Code Online (Sandbox Code Playgroud)

被评估为

x = x ^ y
Run Code Online (Sandbox Code Playgroud)

除了x只评估一次.因此,如果您x是一个属性,它将被调用一次get,一次调用set该值.

^(XOR)操作者执行按位exclusive-OR上积分操作数和逻辑操作exclusive-OR上布尔操作数(模数上总和2):

false ^ false = false;
false ^ true = true;
true ^ false = true;
true ^ true = false;
Run Code Online (Sandbox Code Playgroud)

XOR 运算符在密码学中非常有用,因为它的主要属性是

a ^ b ^ a == b;
Run Code Online (Sandbox Code Playgroud)

因此,您的代码只需添加两个变量的值,以便进行交换.

  • 你能用"x只评估一次"来澄清你的意思吗?我会在你的例子中想到`x = x ^ y`将评估x和y,然后进行异或,然后分配给x的结果.我只会称之为评估一次并分配一次.而且我不确定你真的可以真正评估它真的...我已经注意到了编辑,这实际上是MS的话.如果您有任何解释,我会感兴趣.:) (4认同)
  • @Chris对于MSDN文本的"仅评估过一次"部分,例如你有类似`anArray [aFunction()] ^ = 2;`(它不会调用aFunction()两次)的东西很有用 (3认同)
  • @VMAtm如果你不能提供任何细节为什么你强调**除了x只评估一次**用粗体? (2认同)
  • @VMAtm我已经意识到了这一点.我的观点是,当你强调一点时,你应该能够解释你的重点.否则,不要强调. (2认同)