何时使用“^”运算符

时间:2010-07-22 14:24:46

标签: c#

^ 下面的运营商是什么? 何时使用?

我的编程语言是C#。

6 个答案:

答案 0 :(得分:9)

如果操作数是bool,则

^逻辑XOR运算符,否则它是按位异或运算符

  

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

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

答案 1 :(得分:3)

这是XOR运营商。它用于按位运算,如果左侧为真,则结果为真; 右侧为真,但如果两者为真或两者,则结果为false / em>是假的。所以0xf8 ^ 0x3f将是:

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

这是十六进制的C7。

一般来说,如果你没有进行逐位算术,你就不用担心了。

答案 2 :(得分:1)

答案 3 :(得分:1)

  • 它经常被用作“翻转的方式” 位“通过将其与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(不过,我宁愿使用bool x = true; x!= x;

示例:

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

答案 4 :(得分:0)

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

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

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

我可能会将其重写为:

if( condition1 ^ condition2)
{
}

那就是说,我会逐个基础,并且由于相对模糊而权衡了简洁与潜在混淆的好处。

答案 5 :(得分:0)

其他人提到的独家OR(XOR)运营商。这是XOR的真值表

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

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