何时使用“^”运算符
^下面的运算符是什么? 什么时候用?
我的编程语言是C#。
如果操作数是bool,则^
是逻辑XOR运算符 ,否则它是Bitwise XOR运算符
二元^运算符是为整数类型和bool预定义的。 对于整数类型,^计算其操作数的按位异或。 对于bool操作数,^计算其操作数的逻辑异或; 也就是说,当且仅当其中一个操作数为真时,结果才为真。
这是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运算符。