Opérateurs logiques, relationnels et bit à bit

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 :

  1. Opérateur and : évalue d’abord le membre gauche MyFunction(X)
    • Si le membre gauche renvoie false, l’expression entière vaut obligatoirement false, et la fonction du membre droit MyOtherFunction(Y) ne sera pas exécutée du tout.
  2. L’opérateur or fonctionne 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é.

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)

PascalSignificationÉ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)

anot a
truefalse
falsetrue

and (ET : vrai uniquement si les deux opérandes sont vrais)

aba and b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

or (OU : vrai si au moins un opérande est vrai)

aba or b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

xor (OU exclusif : vrai seulement si les opérandes sont différents)

aba xor b
truetruefalse
truefalsetrue
falsetruetrue
falsefalsefalse

Exemples

Règles de détermination de l’année bissextile

  1. Divisible par 4 mais pas par 100 → Année bissextile
  2. 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)
  • mod opérateur de reste de division, year mod 4 = 0 signifie que l’année est divisible par 4
  • Les expressions doivent être parenthésées : l’opérateur and a une priorité supérieure aux opérateurs de comparaison
  • Caractère court-circuit : si la condition de divisibilité par 400 avant l’opérateur or est satisfaite, les conditions sur 4 et 100 ne sont pas évaluées

Opérateurs logiques, relationnels et bit à bit

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *