Pascal - Opérateurs de bits

Les opérateurs Bitwise pris en charge par Pascal sont répertoriés dans le tableau suivant. Supposons que la variable A a 60 et la variable B 13, alors -

Opérateur La description Exemple
& L'opérateur binaire AND copie un bit dans le résultat s'il existe dans les deux opérandes. (A & B) donnera 12, soit 0000 1100
| L'opérateur OR binaire copie un bit s'il existe dans l'un ou l'autre des opérandes. (A | B) donnera 61, soit 0011 1101
! L'opérateur OR binaire copie un bit s'il existe dans l'un ou l'autre des opérandes. C'est la même chose que | opérateur. (A! B) donnera 61, soit 0011 1101
~ L'opérateur de complément Binary Ones est unaire et a pour effet de «retourner» les bits. (~ A) donnera -61, soit 1100 0011 sous la forme du complément à 2 en raison d'un nombre binaire signé.
<< Opérateur de décalage binaire gauche. La valeur des opérandes de gauche est déplacée vers la gauche du nombre de bits spécifié par l'opérande de droite. Un << 2 donnera 240, soit 1111 0000
>> Opérateur de décalage binaire vers la droite. La valeur des opérandes de gauche est déplacée vers la droite du nombre de bits spécifié par l'opérande de droite. Un >> 2 donnera 15, soit 0000 1111

Veuillez noter que les différentes implémentations de Pascal diffèrent par les opérateurs binaires. Free Pascal, le compilateur que nous avons utilisé ici, prend cependant en charge les opérateurs de bits suivants -

Les opérateurs Opérations
ne pas Pas au niveau du bit
et ET au niveau du bit
ou OU au niveau du bit
xor OU exclusif au niveau du bit
shl Décalage au niveau du bit vers la gauche
Shr Décalage binaire à droite
<< Décalage au niveau du bit vers la gauche
>> Décalage binaire à droite

L'exemple suivant illustre le concept -

program beBitwise;
var
a, b, c: integer;

begin
   a := 60;	(* 60 = 0011 1100 *)  
   b := 13;	(* 13 = 0000 1101 *)
   c := 0;           

   c := a and b;       (* 12 = 0000 1100 *)
   writeln('Line 1 - Value of c is  ', c );

   c := a or b;       (* 61 = 0011 1101 *)
   writeln('Line 2 - Value of c is  ', c );

   c := not a;          (* -61 = 1100 0011 *)
   writeln('Line 3 - Value of c is  ', c );

   c := a << 2;     (* 240 = 1111 0000 *)
   writeln('Line 4 - Value of c is  ', c );

   c := a >> 2;     (* 15 = 0000 1111 *)
   writeln('Line 5 - Value of c is  ', c );
end.

Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant -

Line 1 - Value of c is 12
Line 2 - Value of c is 61
Line 3 - Value of c is -61
Line 4 - Value of c is 240
Line 5 - Value of c is 15