- Conceptos básicos
- Operaciones de asignación
- Operaciones aritméticas
- Incremento y decremento
- Operaciones de comparación
- Operaciones lógicas
- Operaciones a nivel de bits
- Operaciones de modificación
- Operador ternario condicional
- Coma
- Operadores especiales sizeof y typename
- Agrupación con paréntesis
- Prioridades de las operaciones
Operaciones lógicas
Las operaciones lógicas realizan cálculos sobre operandos lógicos y devuelven un resultado del mismo tipo.
P |
Símbolos |
Descripción |
Ejemplo |
Orden de ejecución |
---|---|---|---|---|
2 |
! |
Negación lógica NOT |
!e1 |
D-I |
11 |
&& |
AND lógico |
e1 && e2 |
I-D |
12 |
|| |
OR lógico |
e1 || e2 |
I-D |
La negación lógica NOT transforma true en false y false en true.
El operador lógico AND es igual a true si ambos operandos son iguales a true.
El operador lógico OR es igual a true si al menos un operando es igual a true.
Los operadores AND y OR siempre calculan los operandos de izquierda a derecha y, si es posible, utilizan el método abreviado de cálculo. Si el operando de la izquierda es igual a false, entonces el operador AND omite el segundo operando, ya que no afecta a nada: el resultado ya es false. Si el operando de la izquierda es igual a true, entonces el operador OR omite el segundo operando por la misma razón, ya que el resultado será, en cualquier caso, igual a true.
Esto se utiliza a menudo en los programas para evitar errores en el segundo operando (y siguientes). Por ejemplo, podemos protegernos contra el error de acceder a un elemento de array inexistente:
index < ArraySize(array) && array[index] != 0 |
Aquí utilizamos la función integrada ArraySize que devuelve la longitud de la matriz. Sólo si index es menor que la longitud se lee el elemento con este índice y se compara con cero.
También se utiliza la comprobación por contrarios, utilizando '||', por ejemplo:
ArraySize(array) == 0 || array[0] == 0 |
La condición es verdadera inmediatamente si el array es nulo. Y sólo si hay elementos continuará la comprobación adicional del contenido.
Si la expresión consta de varios operandos combinados mediante OR lógico, con el primer true (si existe) se obtendrá inmediatamente el resultado total de true. Sin embargo, si los operandos se combinan mediante AND lógico, entonces con el primer false se obtendrá inmediatamente el resultado total de false.
Por supuesto, puede combinar diferentes operaciones dentro de una misma expresión, teniendo en cuenta su diferente prioridad: Primero se ejecuta la negación, después las condiciones relacionadas con AND y al final las relacionadas con OR. Si se requiere otra secuencia, debe especificarse explícitamente mediante paréntesis.
Por ejemplo, la siguiente expresión sin paréntesis, A && B || C && D, es de hecho equivalente a (A && B) || (C && D). Para que el OR lógico se ejecute como el primero, debe escribirse entre paréntesis: A && (B || C) && D. Para obtener más detalles sobre el uso de paréntesis, consulte la sección Agrupación con paréntesis.
En el script ExprLogical.mq5 se ofrecen ejemplos sencillos para comprobar en la práctica las operaciones lógicas.
int x = 3, y = 4, z = 5;
|
En la cadena de cálculo expr6, el compilador emite el aviso: «Compruebe la precedencia de los operadores para detectar posibles errores; utilice paréntesis para aclarar la precedencia».
Las operaciones lógicas '&&' y '||' no deben mezclarse con las operaciones a nivel de bits '&' y '|' (se analizan en la sección siguiente).