1 Les opérateurs logiques sont : and, or, not, xor
Ces opérateurs prennent des valeurs booléennes en paramètre et renvoient également une valeur booléenne à l’issue du calcul ;
Lorsque les deux opérandes sont des entiers, and/or/not/xor deviennent des opérateurs bit à bit et produisent un résultat entier.
2 Opérateurs relationnels (de comparaison) : =, <>, >, <, <=, >=.
Si vous maîtrisez les langages de la famille C, faites bien attention aux différences suivantes :
Pascal utilise un seul signe égal pour tester l’égalité : A = B (les langages C emploient A == B) ;
L’opérateur d’affectation spécifique à Pascal est le symbole :=.
Les opérateurs logiques / bit à bit ont une priorité de calcul supérieure aux opérateurs relationnels.
Pour maîtriser l’ordre des calculs, certaines expressions doivent être encadrées par des parenthèses ; sinon des erreurs logiques ou un échec de compilation surviendront.
Exemple incorrect (erreur de compilation)
var
A, B: Integer;
begin
if A = 0 and B <> 0 then ... // Mauvaise syntaxeLangage du code : JavaScript (javascript)
Cause de l’échec de compilation :
Les règles de priorité du compilateur exécutent d’abord l’opération ET bit à bit intermédiaire 0 and B (renvoie un entier) ;
Ensuite, le calcul A = (0 and B) produit une valeur booléenne ;
Enfin, le programme tente d’effectuer une opération entre une valeur booléenne et l’entier 0, ce qui déclenche une erreur de non-concordance des types (type mismatch).
Bonne syntaxe
var
A, B: Integer;
begin
if (A = 0) and (B <> 0) then ...Langage du code : HTML, XML (xml)
Règles d’évaluation court-circuitée (Short-circuit evaluation)
Prenons l’expression if MyFunction(X) and MyOtherFunction(Y) then... comme exemple, voici les règles applicables :
- Opérateur
and: évalue d’abord le membre gaucheMyFunction(X)- Si le membre gauche renvoie
false, l’expression entière vaut obligatoirementfalse, et la fonction du membre droitMyOtherFunction(Y)ne sera pas exécutée du tout.
- Si le membre gauche renvoie
- L’opérateur
orfonctionne sur le même principe :- Si le membre gauche renvoie déjà
true, le résultat global est vrai et le code du membre droit n’est pas exécuté.
- Si le membre gauche renvoie déjà
Cette caractéristique est très utile pour les vérifications de pointeur nul :
if (A <> nil) and A.IsValid then...Langage du code : HTML, XML (xml)
Le code ne plante pas même si A est le pointeur nul nil. Le mot-clé nil désigne le pointeur nul, équivaut numériquement à 0 et correspond au mot-clé null des autres langages.
Classification des opérateurs
Opérateurs relationnels (renvoient un Boolean)
| Pascal | Signification | Équivalent en C |
|---|---|---|
= | Égal à | == |
<> | Différent de | != |
> | Supérieur à | > |
< | Inférieur à | < |
>= | Supérieur ou égal à | >= |
<= | Inférieur ou égal à | <= |
Opérateurs logiques / bit à bit
not : NON logique / Complément bit à bit and : ET logique / ET bit à bit or : OU logique / OU bit à bit xor : OU exclusif logique / OU exclusif bit à bit
not (NON)
| a | not a |
|---|---|
| true | false |
| false | true |
and (ET : vrai uniquement si les deux opérandes sont vrais)
| a | b | a and b |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
or (OU : vrai si au moins un opérande est vrai)
| a | b | a or b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
xor (OU exclusif : vrai seulement si les opérandes sont différents)
| a | b | a xor b |
|---|---|---|
| true | true | false |
| true | false | true |
| false | true | true |
| false | false | false |
Exemples
Règles de détermination de l’année bissextile
- Divisible par 4 mais pas par 100 → Année bissextile
- Divisible par 400 → Année bissextile ; toutes les autres années sont communes
{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program LeapYearCheck;
// Fonction de vérification d'année bissextile, reçoit une année et renvoie un booléen
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('Saisissez une année : ');
ReadLn(y);
if IsLeapYear(y) then
Writeln(y, ' est une année bissextile')
else
Writeln(y, ' est une année commune');
ReadLn;
end.Langage du code : JavaScript (javascript)

modopérateur de reste de division,year mod 4 = 0signifie que l’année est divisible par 4- Les expressions doivent être parenthésées : l’opérateur
anda une priorité supérieure aux opérateurs de comparaison - Caractère court-circuit : si la condition de divisibilité par 400 avant l’opérateur
orest satisfaite, les conditions sur 4 et 100 ne sont pas évaluées
Opérateurs logiques, relationnels et bit à bit