2010-07-22 14 views
5

¿Cuál es el operador por debajo de ^? ¿Cuándo usarlo?Cuándo utilizar el operador "^"

Mi lenguaje de programación es C#.

+3

Google , o MSDN en este caso, es su amigo: http://msdn.microsoft.com/en-us/library/zkacc7k1%28VS.71%29.aspx. Para responder a su segunda pregunta, utiliza el operador cuando lo necesita al igual que, por ejemplo, el operador '+' – stakx

+0

Google no es una respuesta, MSDN, sin embargo, lo es. http://meta.stackexchange.com/questions/8724/how-to-deal-with-google-questions – Bobby

+6

Si no sabe lo que está buscando, Google puede ser difícil, especialmente porque Google ni siquiera reconoce el carácter ^. Además, también quiere saber "cuándo usarlo" algo que ningún lugar podría responder mejor que StackOverflow –

Respuesta

9

^ es una lógico XOR Operador si los operandos son Bools, de lo contrario es un XOR Operador

binarios^operadores están predefinidos para los tipos integrales y bool. Para los tipos integrales,^calcula el OR exclusivo en bits de sus operandos. Para los operandos bool,^calcula el operador lógico exclusivo o sus operandos; es decir, el resultado es verdadero si y solo si exactamente uno de sus operandos es verdadero.

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

+4

"Operador lógico XOR". - Eso solo es cierto si los operandos son bools, de lo contrario es un operador bit a bit. Jugar rápido y suelto con los términos 'bitwise' y 'logical' hace la vida muy difícil cuando explicas la diferencia entre & y && en 'C' ... –

+0

@Will Dean: Gracias por aclarar. – sshow

3

Es el operador XOR. Se usa en operaciones bit a bit, donde el resultado es verdadero si el lado izquierdo es verdadero o el lado derecho es verdadero, pero falso si ambos son verdaderos o ambos son falsos. Así 0xf8^0x3f sería:

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

Cuál es C7 en hexadecimal.

En general, si no está haciendo aritmética en modo bit, no tendrá que preocuparse por ello.

+0

Olvidó agregar que también es falso si BOTH es falso. –

0

pienso en él como un operador binario igual ||, & &, etc ...

Si estuviera escribiendo la lógica y terminó con:

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

que podría volver a escribir como :

if(condition1^condition2) 
{ 
} 

dicho esto, me gustaría tener en una base de caso por base y sopesar el beneficio de la brevedad frente a la ofuscación potencial debido a la relativa oscuridad.

0

Su operador OR exclusivo (XOR) como se menciona por otros. Aquí está la tabla de verdad para XOR

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

Tenga en cuenta que P^Q es igual a P! = Q. A veces P! = Q se usa en el código en lugar del operador XOR.

1
  • se utiliza a menudo como una forma de "flip bits" aplicándole una operación XOR con 1 (voltear), 0 (para mantener). Por lo general, esto es útil en cifrado/descifrado/hash.** ESTE es realmente útil **

Ejemplo:

101^ 
110 
----- 
011 //Flip the first 2, keep the 3rd 
  • También se puede utilizar para un método de intercambio (aunque, utilizando el camino y genéricos estándar es probablemente más ideal) :

Ejemplo:

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; 
} 
  • Se utiliza en aritmética binaria. ** Esta es realmente útil **

  • Lanza una bool (sin embargo, yo prefiero usar bool x = true; x = x;

Ejemplo:

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