【问题标题】:When to use "^" operator何时使用“^”运算符
【发布时间】:2010-07-22 14:24:45
【问题描述】:

^下面的运算符是什么? 什么时候使用?

我的编程语言是 C#。

【问题讨论】:

  • Google,或者在这种情况下是 MSDN,是你的朋友:msdn.microsoft.com/en-us/library/zkacc7k1%28VS.71%29.aspx。要回答您的第二个问题,请在需要时使用运算符,就像例如+ 运算符。
  • Google 不是答案,但 MSDN 是。 meta.stackexchange.com/questions/8724/…
  • 如果他不知道自己在寻找什么,谷歌搜索可能会很困难,特别是因为谷歌甚至不识别 ^ 字符。另外,他还想知道“何时使用它”,这是 StackOverflow 无法回答的问题
  • 想知道的是,我什么时候使用^_^运算符?
  • @Neil N: 知道^是运算符,是C#语言,是微软的语言,微软的开发平台叫MSDN,可以搜索为MSDN C# operators。这就是我最终到达上述评论中链接的页面的方式。

标签: c#


【解决方案1】:

^ 如果操作数是布尔值,则为逻辑异或运算符,否则为位异或运算符

二进制 ^ 运算符是为整数类型和 bool 预定义的。对于整数类型,^ 计算其操作数的按位异或。对于 bool 操作数,^ 计算其操作数的逻辑异或;也就是说,当且仅当它的一个操作数恰好为真时,结果才为真。

http://msdn.microsoft.com/en-us/library/zkacc7k1.aspx

【讨论】:

  • “逻辑异或运算符。” - 仅当操作数是布尔值时才如此,否则它是按位运算符。当您解释“C”中的 & 和 && 之间的区别时,使用“按位”和“逻辑”这两个术语玩得又快又松会让生活变得非常困难......
  • @Will Dean:感谢您的澄清。
【解决方案2】:

这是XOR 运算符。它用于按位运算,如果左侧为真右侧为真,则结果为真,但如果both为真或both 是错误的。所以0xf8 ^ 0x3f 将是:

1111 1000
0011 1111
---------
1100 0111

十六进制中的 C7。

一般来说,如果您不进行按位运算,则无需担心。

【讨论】:

  • 你忘了补充如果两者都是假的,它也是假的。
【解决方案3】:
【解决方案4】:
  • 它经常被用作“翻转 位”通过与 1 进行异或运算(翻转), 0(保留)。通常这很有用 在加密/解密/散列。 ** 这真的很有用 **

例子:

101 ^  
110  
-----
011   //Flip the first 2, keep the 3rd
  • 它也可以用于交换 方法(虽然,使用标准 方式和泛型可能更理想):

例子:

int myMoney = 10;
int yourMoney = 50;
Swap(myMoney, yourMoney)

public void Swap(ref int a, ref int b) //No 'temp' variable necessary
{
  a ^= b;
  b ^= a;
  a ^= b;
}
  • 它用于二进制算术。 ** 这真的很有用**

  • 翻转一个布尔值(不过,我宁愿使用 bool x = true; x != x;

例子:

public bool flip(ref bool b)
{
    b ^= true;
}

【讨论】:

    【解决方案5】:

    我认为它是一个二元运算符,就像 ||、&& 等......

    如果我正在编写逻辑并最终得到:

    if( (condition1 && !condition2) || (condition2 && !condition1) )
    {
    }
    

    我可能会改写为:

    if( condition1 ^ condition2)
    {
    }
    

    也就是说,我会根据具体情况来衡量,并权衡简洁与由于相对晦涩而导致的潜在混淆的好处。

    【讨论】:

      【解决方案6】:

      其他人提到的它的异或(XOR)运算符。这是异或的真值表

      P    Q    P^Q
      T    T     F
      T    F     T
      F    T     T
      F    F     F
      

      请注意,P^Q 等于 P!=Q。有时在代码中使用 P!=Q 而不是 XOR 运算符。

      【讨论】:

        猜你喜欢
        • 2011-05-30
        • 1970-01-01
        • 2013-08-10
        • 2011-02-06
        • 2013-05-14
        • 2014-03-30
        • 2011-10-25
        • 1970-01-01
        相关资源
        最近更新 更多