【问题标题】:What in the world does a ^= operator do?^= 运算符到底是做什么的?
【发布时间】:2015-02-20 15:34:17
【问题描述】:

我正在查看一个排列代码并试图了解它是如何工作的,但是一个操作让我不知所措:^=。谷歌不会让我搜索这些字符,所以谁能告诉我它在做什么,这个运算符是什么意思?您可以在下面看到一个示例。谢谢!

private void swap(ref char a, ref char b)
{
    if (a == b)
        return;
    a ^= b;
    b ^= a;
    a ^= b;
}

【问题讨论】:

  • Google 不会让我搜索这些字符 - 但你知道这是一个运算符,如果你找到一个完整的列表,也没有多少运算符可供查看。
  • 提示:不要像那样交换两个 char 变量。这是一个很好的练习来了解 XOR 运算符是如何工作的,但是使用中间变量是进行实际交换的更好方法。

标签: c# operators permutation


【解决方案1】:

From MSDN:
形式的表达

x ^= y

被评估为

x = x ^ y

除了 x 只计算一次。因此,如果您的 x 是一个属性,它将被调用一次到 get 和一次到 set 值。

^ (XOR) 运算符对整数操作数执行按位 exclusive-OR 运算,对布尔操作数执行逻辑 exclusive-OR(对模数求和 2):

false ^ false = false;
false ^ true = true;
true ^ false = true;
true ^ true = false;

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

a ^ b ^ a == b;

因此,您的代码只需添加两个变量的值,以便交换它们。

【讨论】:

  • 您能澄清一下“x 只评估一次”的意思吗?我会认为在您的示例中x = x ^ yx 和 y 将被评估,然后异或,然后将结果分配给 x。我只会称其为评估一次并分配一次。而且我不确定您实际上如何才能真正评估它……感谢编辑,我注意到这实际上是 MS 的话。如果您有任何解释,尽管我很感兴趣。 :)
  • @Chris 请参阅 MSDN 文章,目前无法为您提供任何详细信息。尝试调查IL 代码。
  • @VMAtm 如果你不能提供任何细节,为什么你强调 除了 x 只被评估一次加粗?
  • @Chris 对于 MSDN 文本的“仅评估一次”部分,例如当您有类似 anArray[aFunction()] ^= 2; 的内容时它很有用(它不会调用 aFunction() 两次)
  • @VMAtm 我已经知道了。我的观点是,当你给出一些重点时,你应该能够解释你的重点。否则,不要强调。
【解决方案2】:

a ^= ba^b 的值存储在 a 中,这是 a 和 b

【讨论】:

  • 好的,你能给我举个例子吗?
  • @Volearix :说 a 是 6(二进制 0110),b 是 12(1100),a ^=b 会将 a 设置为 10(1010),a 的位设置为 1 仅当一个(a 或 b)位先前已设置。
【解决方案3】:

这是异或赋值运算符。

您可以在这里了解更多信息:https://msdn.microsoft.com/en-us/library/0zbsw2z6.aspx

【讨论】:

    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 2019-06-10
      • 2015-03-28
      • 2021-07-15
      • 1970-01-01
      • 2014-09-16
      • 2013-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多