Vous êtes sur la page 1sur 5

Ya habamos visto algunos operadores que resultaban en un verdadero (true) o un falso (false) al usarse con nmeros o variables, estos

eran: == operador de igualdad en C != operador de desigualdad > mayor < menor >= mayor o igual <= menor o igual Con estos se pueden construir expresiones sencillas como: numero <= 7, dependiendo del valor de la variable numero esa expresin puede ser verdadera o falsa. Este tipo de expresiones se utilizan para las condiciones en las estructuras de repeticin y de seleccin.

Pero es posible construir expresiones ms complejas utilizando otros operadoreslgicos:


&& ( Y lgico) // (O lgico) ! (NO lgico o negacin lgica)

Veamos qu significan cada uno de ellos:


valor = (expresion1 && expresion2) En este caso si expresion1 y expresion2 son verdaderas, valor resulta verdadero (true). Si alguna o ambas de las expresiones son falsas, valor resulta en falso (false). valor = (expresion1 // expresion2) En este caso si ambas expresiones son verdaderas, valor resulta verdadero. Si una de las expresiones es verdadera y la otra falsa, valor resulta verdadero. Si las dos expresiones son falsas, valor resulta falso. valor = (!expresion1) En este caso si la expresin es verdadera, valor resulta falso. Si la expresin es falsa, valor resulta falso. Se puede usar && de la siguiente manera: if (edad >= 12 && edad <= 20) { printf(Usted es adolescente); }

1 Sinopsis
Los operadores lgicos producen un resultado booleano, ( 3.2.1b), y sus operandos son tambin valores lgicos o asimilables a ellos (los valores numricos son asimilados a cierto o falsosegn su valor sea cero o distinto de cero). Por contra, recuerde que las operaciones entre bits ( 4.9.3) producen valores arbitrarios.

Los operadores lgicos son tres; dos de ellos son binarios, el ltimo (negacin) es unario. Tienen una doble posibilidad de representacin en el Estndar C++ actual: la representacin tradicional que se indica a continuacin, y la natural introducida recientemente que se detalla ms adelante .

Y lgico && O lgico ||

AND OR

Negacin lgica ! NOT

Las expresiones conectadas con los operadores && y || se evalan de izquierda a derecha, y la evaluacin se detiene tan pronto como el resultado verdadero o falso es conocido (muchos programas tienen una lgica que se basa en este propiedad).

2 &&

Operador Y lgico

Tambin denominado por su nombre en ingls (generalmente en maysculas) AND lgico. Devuelve un valor lgico true si ambos operandos son ciertos. En caso contrario el resultado es false.

Sintaxis
expr-AND-logica && expresion-OR-inclusive Comentario: La operatoria es como sigue: El primer operando (de la izquierda) es convertido a bool. Para ello, si es una expresin, se evala para obtener el resultado (esta computacin puede tener ciertos efectos laterales). A continuacin, el valor obtenido es convertido a bool cierto/falso siguiendo las reglas de conversin estndar ( 3.2.1b). Si el resultado es false, el proceso se detiene y este es el resultado, sin que en este caso sea necesario evaluar la expresin de la derecha (recurdese que en el diseo de C++ prima la velocidad). Si el resultado del operando izquierdo es cierto, se contina con la evaluacin de la expresin de la derecha, que tambin es convertida a bool. Si el nuevo resultado es true, entonces el resultado del operador es true. En caso contrario el resultado es false. Nota: la Norma informa que antes de ser evaluada la expresin derecha, han sucedido todos los posibles efectos laterales de la expresin izquierda, a excepcin de la destruccin de los posibles objetos temporales que se hubiesen creado. Ejemplo: int m[3] = {0,1,2}; int x = 0; if (m && x) cout << "Cierto."; else cout << "Falso."; Salida: Falso. El valor m, que es interpretado como un puntero al primer elemento de la matriz, es transformado a un bool. Como es distinto de cero (no es un puntero nulo) el resultado es cierto. A continuacin, el valor x es convertido tambin a bool. En este caso la conversin produce falso, con lo que este es el resultado del parntesis de la sentencia if. Ejemplo #include <iostream.h> bool alto = true, bajo = false, blanco = true, negro = false; int main (void) { if (alto && bajo) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (alto && blanco) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (bajo && negro) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida: Uno falso Dos cierto Tres falso

3 ||

Operador O lgico

Este operador binario devuelve true si alguno de los operandos es cierto. En caso contrario devuelve false.

Sintaxis
expr-OR-logica || expresion-AND-logica Comentario Este operador sigue un funcionamiento anlogo al anterior. El primer operando (izquierdo) es convertido a bool. Para ello, si es una expresin, se evala para obtener el resultado (esta computacin puede tener ciertos efectos laterales). A continuacin el valor obtenido es convertido a bool cierto/falso siguiendo las reglas de conversin estndar ( 3.2.1b). Si el resultado estrue, el proceso se detiene y este es el resultado, sin que en este caso sea necesario evaluar la expresin de la derecha (recurdese que en el diseo de C++ prima la velocidad). Si el resultado del operando izquierdo es false, se contina con la evaluacin de la expresin de la derecha, que tambin es convertida a bool. Si el nuevo resultado es true, entonces el resultado del operador es true. En caso contrario el resultado es false. Nota: el Estndar establece que antes de ser evaluada la expresin derecha, han sucedido todos los posibles efectos laterales de la expresin izquierda, a excepcin de la destruccin de los posibles objetos temporales que se hubieran creado. Ejemplo #include <iostream.h> bool alto = true, bajo = false, blanco = true, negro = false; int main (void) { if (alto || bajo) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (alto || blanco) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (bajo || negro) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida Uno cierto Dos cierto Tres falso

4 !

Operador NO lgico:

Este operador es denominado tambin negacin lgica y se representa en el texto escrito por la palabra inglesa NOT (otros lenguajes utilizan directamente esta palabra para representar el operador en el cdigo).

Sintaxis
! expresion-cast Comentario

El operando expresion-cast (que puede ser una expresin que se evala a un resultado 1.2.1) es convertido a tipo bool, con lo que solo puede ser uno de los valores cierto/falso. A continuacin el operador cambia su valor: Si es cierto es convertido a falso y viceversa. Resulta por tanto, que el resultado de este operador es siempre un tipo bool, aunque al existir una conversin estndar por la que un cero es convertido a false, y cualquier valor distinto de cero atrue ( 3.2.1b), coloquialmente se dice que este operador convierte un operando 0 en 1 y uno no-cero en 0. En otras palabras: este operador devuelve cierto (true) si la expresin se evala a distinto de cero, en caso contrario devuelve falso (false).

Ejemplo #include <iostream.h> bool alto = true, bajo = false; int main (void) { if (alto) { cout << "Uno cierto" << endl; } else cout << "Uno falso" << endl; if (!alto) { cout << "Dos cierto" << endl; } else cout << "Dos falso" << endl; if (!bajo) { cout << "Tres cierto" << endl; } else cout << "Tres falso" << endl; } Salida: Uno cierto Dos falso Tres cierto

Si E es una expresin, !E es equivalente a (0 == E). Como consecuencia, las expresiones que siguen son equivalentes dos a dos: if (! valid); if (valid == 0); ... if (valid); if (valid != 0);

7 Representacin explcita
Los operadores lgicos entre valores lgicos &&, ||, !; la relacin de desigualdad !=; algunos de los operadores lgicos entre bits (&, |, ^, ~) y sus expresiones compuestas (&=, |=, ^=), tienen una representacin realmente difcil de leer, con la desventaja adicional que sus smbolos no siempre estn fcilmente accesibles en ordenadores con teclados distintos del estndar USA. Para resolver este problema, el Estndar C++ ha introducido nuevas formas para su representacin; las denominamos formas explcitas o naturales, en razn de que se parecen ms a las palabras correspondientes del lenguaje natural. Las nuevas formas constituyen palabras-clave, y la tabla de equivalencias es la siguiente:

Palabra Smbolo Referencia clave and && or || not ! bitand & 4.9.3 xor bitor compl and_eq xor_eq or_eq ^ | ~ &= ^= |= 4.9.3 4.9.3 4.9.3 4.9.3 4.9.3 4.9.3

Descripcin Operador Y lgico Operador O lgico Operador negacin lgica Operador AND entre bits Operador OR exclusivo entre bits Operador OR inclusivo entre bits Operador complemento a uno de bits Asignacin compuesta (AND entre bits) Asignacin compuesta (XOR entre bits) Asignacin compuesta (OR entre bits)

not_eq

!=

4.9.12

Operador relacional de desigualdad

Nota: ni el compilador Borland C++ 5.5 ni MS VC++ 6.0 soportan esta caracterstica del estndar, aunque el de Microsoft anuncia en su documentacin que pueden utilizarse "defines" ( #define #define #define #define #define bitand & bitor | and_eq &= or_eq |= not_eq != 4.9.10b). Por ejemplo:

Por su parte, el compilador GNU gcc dispone de la opcin de compilacin -fno-operator-names, que permite que las palabras-clave and, bitand, bitor, compl, not, y or, no sean tratadas como sinnimos de los operadores correspondientes.

Vous aimerez peut-être aussi