何时使用“^”运算符

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

我的编程语言是C#。

如果操作数是bool,则^逻辑XOR运算符 ,否则它是Bitwise XOR运算符

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

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

这是XOR运算符。 它用于按位运算,如果左侧为真右侧为真,则结果为true;如果两者均为真或两者均为假,则结果为true。 所以0xf8 ^ 0x3f将是:

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

这是hex的C7。

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

  • 它通常用作“翻转位”的方法,通过将其与1(翻转),0(保持)进行异或。 通常这在加密/解密/散列中很有用。 **这实际上很有用**

例:

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

例:

 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; } 

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

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

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

我可能会把它重写为:

 if( condition1 ^ condition2) { } 

也就是说,我会逐个基础地考虑它,并权衡由于相对默默无闻而导致的简洁与潜在混淆的好处。

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

 PQP^Q TTF TFT FTT FFF 

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