1 Os operadores lógicos compreendem: and, or, not, xor
Estes operadores recebem valores booleanos como argumentos e o resultado da operação também é booleano;
Quando ambos os operandos são inteiros, and/or/not/xor tornam-se operadores bit a bit, retornando um valor inteiro.
2 Operadores relacionais (de comparação): =, <>, >, <, <=, >=.
Se você tem familiaridade com linguagens da família C, é fundamental diferenciar os pontos abaixo:
No Pascal, a comparação de igualdade usa apenas um sinal de igual A = B (linguagens C utilizam A == B);
O operador de atribuição exclusivo do Pascal é o símbolo :=.
Os operadores lógicos / bit a bit têm precedência maior que os operadores relacionais.
Para controlar a ordem dos cálculos, algumas expressões devem ser envolvidas por parênteses; caso contrário, ocorrerão erros lógicos ou falhas na compilação.
Exemplo incorreto (erro de compilação)
var
A, B: Integer;
begin
if A = 0 and B <> 0 then ... // Forma incorretaCode language: JavaScript (javascript)
Motivo da falha na compilação:
As regras de precedência do compilador executam primeiro a operação AND bit a bit intermediária 0 and B (retorna inteiro);
Depois calcula A = (0 and B), gerando um valor booleano;
Por fim, o programa tenta realizar uma operação entre um booleano e o inteiro 0, causando um erro de incompatibilidade de tipos (type mismatch).
Forma correta
var
A, B: Integer;
begin
if (A = 0) and (B <> 0) then ...Code language: HTML, XML (xml)
Regra de avaliação curto-circuito (Short-circuit evaluation)
Tomando como exemplo a expressão if MyFunction(X) and MyOtherFunction(Y) then..., as regras são as seguintes:
- Operação
and: executa primeiro o lado esquerdoMyFunction(X)- Se o lado esquerdo retornar
false, o resultado de toda a expressão será obrigatoriamentefalse, e a função da direitaMyOtherFunction(Y)não será executada de forma alguma.
- Se o lado esquerdo retornar
- A operação
orsegue o mesmo princípio:- Se o lado esquerdo já retornar
true, o resultado total é verdadeiro e o código da direita não é executado.
- Se o lado esquerdo já retornar
Essa característica é muito útil para validação de ponteiro nulo:
if (A <> nil) and A.IsValid then...Code language: HTML, XML (xml)
Mesmo que A seja o ponteiro nulo nil, o código não irá travar. A palavra-chave nil representa ponteiro nulo, numericamente equivalente a 0, correspondente ao null de outras linguagens.
Classificação dos operadores
Operadores relacionais (retornam Boolean)
| Pascal | Significado | Equivalente em C |
|---|---|---|
= | Igual a | == |
<> | Diferente de | != |
> | Maior que | > |
< | Menor que | < |
>= | Maior ou igual a | >= |
<= | Menor ou igual a | <= |
Operadores lógicos / bit a bit
not: Negação lógica / Complemento bit a bit and: Conjunção lógica / AND bit a bit or: Disjunção lógica / OR bit a bit xor: Disjunção exclusiva lógica / XOR bit a bit
not (negação)
| a | not a |
|---|---|
| true | false |
| false | true |
and (conjunção: só verdadeiro se ambos forem verdadeiros)
| a | b | a and b |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
or (disjunção: verdadeiro se pelo menos um for verdadeiro)
| a | b | a or b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
xor (disjunção exclusiva: verdadeiro apenas se os valores forem diferentes)
| a | b | a xor b |
|---|---|---|
| true | true | false |
| true | false | true |
| false | true | true |
| false | false | false |
Exemplos
Regras de identificação de ano bissexto
- Divisível por 4, mas não por 100 → Ano bissexto
- Divisível por 400 → Ano bissexto Os demais são anos comuns
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program LeapYearCheck;
// Função que verifica ano bissexto, recebe ano e retorna 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('Informe o ano:');
ReadLn(y);
if IsLeapYear(y) then
Writeln(y, ' é ano bissexto')
else
Writeln(y, ' é ano comum');
ReadLn;
end.Code language: JavaScript (javascript)

modoperador de resto,year mod 4 = 0significa divisível por 4- Expressões exigem parênteses:
andtem precedência superior aos operadores de comparação - Característica curto-circuito: se a condição de divisibilidade por 400 antes do
orfor atendida, as condições de 4/100 não serão avaliadas
Operadores lógicos, relacionais e bit a bit