1 Los operadores lógicos son: and, or, not, xor
Estos operadores reciben valores booleanos como parámetros y su resultado también es booleano;
Cuando ambos operandos son números enteros, and/or/not/xor pasan a ser operadores bit a bit y devuelven un valor entero.
2 Operadores relacionales (de comparación): =, <>, >, <, <=, >=.
Si conoces los lenguajes de la familia C, debes diferenciar estos puntos:
En Pascal solo se usa un signo igual para comprobar igualdad: A = B (en C se usa A == B);
El operador de asignación propio de Pascal es el símbolo :=.
Los operadores lógicos / bit a bit tienen mayor precedencia que los operadores relacionales.
Para controlar el orden de cálculo, algunas expresiones deben envolverse entre paréntesis; de lo contrario habrá errores lógicos o fallos de compilación.
Ejemplo incorrecto (error de compilación)
var
A, B: Integer;
begin
if A = 0 and B <> 0 then ... // Escritura erróneaLenguaje del código: JavaScript (javascript)
Causa del fallo de compilación:
Las reglas de precedencia del compilador ejecutan primero la operación AND bit a bit central 0 and B (devuelve un entero);
Luego calcula A = (0 and B), obteniendo un valor booleano;
Finalmente el programa intenta operar entre un valor booleano y el entero 0, lo que provoca un error de incompatibilidad de tipos (type mismatch).
Forma correcta
var
A, B: Integer;
begin
if (A = 0) and (B <> 0) then ...Lenguaje del código: HTML, XML (xml)
Reglas de evaluación cortocircuitada (Short-circuit evaluation)
Tomemos como ejemplo la expresión if MyFunction(X) and MyOtherFunction(Y) then..., sus reglas son las siguientes:
- Operador
and: se evalúa primero el lado izquierdoMyFunction(X)- Si el lado izquierdo devuelve
false, el resultado completo de la expresión será obligatoriamentefalse, y la función derechaMyOtherFunction(Y)no se ejecutará en absoluto.
- Si el lado izquierdo devuelve
- El operador
orfunciona igual:- Si el lado izquierdo ya devuelve
true, el resultado total es verdadero y el código derecho no se ejecuta.
- Si el lado izquierdo ya devuelve
Esta característica es muy útil para comprobaciones de puntero nulo:
if (A <> nil) and A.IsValid then...Lenguaje del código: HTML, XML (xml)
Incluso si A es el puntero nulo nil, el código no colapsa. La palabra clave nil representa el puntero nulo, equivale numéricamente a 0 y corresponde a null en otros lenguajes.
Clasificación de operadores
Operadores relacionales (devuelven Boolean)
| Pascal | Significado | Equivalente en C |
|---|---|---|
= | Igual a | == |
<> | Diferente de | != |
> | Mayor que | > |
< | Menor que | < |
>= | Mayor o igual que | >= |
<= | Menor o igual que | <= |
Operadores lógicos / bit a bit
not: Negación lógica / Complemento bit a bit and: Conjunción lógica / AND bit a bit or: Disyunción lógica / OR bit a bit xor: Disyunción exclusiva lógica / XOR bit a bit
not (negación)
| a | not a |
|---|---|
| true | false |
| false | true |
and (conjunción, solo verdadero si ambos operandos son verdaderos)
| a | b | a and b |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
or (disyunción, verdadero si al menos un operando es verdadero)
| a | b | a or b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
xor (disyunción exclusiva, verdadero solo si los operandos son distintos)
| a | b | a xor b |
|---|---|---|
| true | true | false |
| true | false | true |
| false | true | true |
| false | false | false |
Ejemplos
Reglas para determinar año bisiesto
- Divisible entre 4, pero no entre 100 → Año bisiesto
- Divisible entre 400 → Año bisiesto Los demás son años comunes
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program LeapYearCheck;
// Función para comprobar año bisiesto, recibe un año y devuelve booleano
function IsLeapYear(year: Integer): Boolean;
begin
Result := ((year mod 4 = 0) and (year mod 100 <> 0)) or (year mod 400 = 0);
end;
var
y: Integer;
begin
Write('Ingrese el año:');
ReadLn(y);
if IsLeapYear(y) then
Writeln(y, ' es año bisiesto')
else
Writeln(y, ' es año común');
ReadLn;
end.Lenguaje del código: JavaScript (javascript)

modoperador de resto,year mod 4 = 0significa que es divisible entre 4- Las expresiones requieren paréntesis:
andtiene mayor precedencia que los operadores de comparación - Característica de cortocircuito: si la condición de divisibilidad entre 400 delante del
orse cumple, no se evalúan las condiciones de 4/100
Operadores lógicos, relacionales y bit a bit