CLR: .Net / Mono / Boo / Otros CLR > C#
While y OR
Amilius:
El gorro de gnomo es el operador XOR. :)
--- Código: C# --- static void Main(string[] args) { int a, b; bool x, y; for (int i = 0; i < 4; i++) { a = i & 1; b = i >> 1; x = a == 1; y = b == 1; Console.WriteLine("{0} xor {1} = {2}", a, b, a ^ b); Console.WriteLine("{0} xor {1} = {2}", x, y, x ^ y); } }
tannke:
--- Cita de: "Amilius" ---El gorro de gnomo es el operador XOR. :)
--- Fin de la cita ---
+1
Tienes toda la razón! Habria jurado que no existía, hasta me hicistes desempolvar el libro de programación, jejejej. Supongo que la falta de costumbre en usarlo (creo que nunca lo utilicé).
Un Saludo
ProfesorX:
--- Cita de: "Amilius" ---El gorro de gnomo es el operador XOR. :)
--- Fin de la cita ---
Temo que estas equivocado en parte, y acertado en parte.
El simbolo ^ es el operado XOR pero solo para operaciones de bits, y en este caso necesitamos XOR para operaciones logicas y tal como mencione en un mensaje anterior, el operador logico XOR no existe.
Por eso en realidad ^ no sirve para el problema mencionado arriba donde necesitamos un operador logico.
Repasando
Operadores de bits
& and
| or
! not
^ XOR
operadores logicos
&& and
|| or
! not
Asi que para el problema que esta mencionado en el primer mensaje solo sirve mi solucion y la solucion de tannke
Saludos :)
tannke:
El libro que yo tengo no dice eso (Microsoft C# Curso de programacion, de Fco. Javier Ceballos) para el que lo tenga, pagina 74:
Operadores lógicos: && o & (AND), || o | (OR), !(NOT), ^(XOR)
Operadores a nivel de bits: &(AND), |(OR), ^(XOR), <<(Carry izq.), >>(carry der.)
test porque ya no sabia que pensar
--- Código: C# ---static void Main(string[] args) { //provando XOR (amos a ver) string Value2; int alarmaxux; //voy a provar los 4 casos posibles Value2 = null; alarmaxux = 1; if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string en nulo y int en 1"); Value2 = null; alarmaxux = 5; if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string en nulo y int diferente de 1"); Value2 = "No nulo"; alarmaxux = 1; if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string NO nulo y int en 1"); Value2 = "No nulo"; alarmaxux = 5; if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string NO nulo y int diferente de 1"); Console.ReadLine(); }
Amilius:
--- Cita de: "ProfesorX" ---...
Por eso en realidad ^ no sirve para el problema mencionado arriba donde necesitamos un operador logico.
...
--- Fin de la cita ---
De hecho XOR es siempre un operador lógico que trabaja a nivel de bits. Son las características del lenguaje las que hacen transparente su aplicación como operador para el tipo bool y tipos enteros. La gracia del tipo bool es que fuerza a que sus valores sean 0 o 1, en C# no puedes hacer un casting de entero a bool, tienes que usar un operador que retorna un valor bool: "bool b = i != 0;". En C++ puedes hacer el casting de un entero a bool y el compilador generará código para que el tipo bool contenga 0 si el entero es 0 o 1 si no es cero. Sin embago en C++ es recomendable usar la misma forma de c#: "bool b = i != 0;" para evitar un Warning de nivel 4, además de hacer explícito el hecho que la variable b contiene 0 si i es 0 o 1 si i no es 0.
Navegación
[*] Página Anterior
Ir a la versión completa