Les opérateurs logiques binaires

Par : TutorialsGrey, le 15 Janvier 2022

Vous pouvez utiliser les opérateurs logiques binaires pour effectuer une logique booléenne sur des bits individuels. C'est similaire à l'utilisation d'opérateurs logiques tels que ET, OU, et NON, mais au niveau du bit. Les similitudes entre les opérateurs logiques binaires et les opérateurs logiques ordinaires ne s'arrêtent pas là.

Il est possible d'évaluer des expressions booléennes avec des opérateurs binaires au lieu d'opérateurs logiques, mais cette utilisation excessive est généralement déconseillée.

À moins que vous n'ayez une bonne raison et que vous sachiez ce que vous faites, vous ne devriez utiliser les opérateurs logiques binaires que pour contrôler les bits. Il est trop facile de se tromper autrement. Dans la plupart des cas, vous passerez des entiers comme paramètres aux opérateurs logiques binaires.

 

L'opérateur binaire ET

L'opérateur binaire ET (&) effectue une conjonction logique sur les bits correspondants de ses opérandes. Pour chaque paire de bits occupant la même position dans les deux nombres, il renvoie un uniquement lorsque les deux bits sont activés :

a 1 0 0 1 1 1 0 0
b 0 0 1 1 0 1 0 0
a & b 0 0 0 1 0 1 0 0

Le modèle binaire résultant est une intersection des paramètres de l'opérateur. Il a deux bits activés dans les positions où les deux opérandes sont à un. Dans tous les autres endroits, au moins une des entrées a un bit nul.

Arithmétiquement, cela équivaut à un produit de deux valeurs binaires. Vous pouvez calculer le ET binaire des nombres a et b en multipliant leurs bits à chaque indice i :

(a & b)i = ai x bi

Voici un eemple concret :

Expression Valeur Binaire Valeur Décimale
a 100111002 15610
b 1101002 5210
a & b 101002 2010

Un multiplié par un donne un, mais tout ce qui est multiplié par zéro donne toujours zéro. Vous pouvez également prendre le minimum des deux bits de chaque paire. Remarquez que lorsque les opérandes ont des longueurs de bits inégales, le plus court est automatiquement complété par des zéros à gauche.

 

L'opérateur binaire OU

L'opérateur binaire OU (|) effectue une disjonction logique. Pour chaque paire de bits correspondante, il renvoie un si au moins l'un d'entre eux est activé :

a 1 0 0 1 1 1 0 0
b 0 0 1 1 0 1 0 0
a | b 1 0 1 1 0 1 0 0

Le modèle binaire résultant est une union des paramètres de l'opérateur. Cinq bits sont activés lorsque l'un ou l'autre des opérandes est à un. Seule une combinaison de deux zéros donne un zéro dans la sortie finale.

L'arithmétique sous-jacente est une combinaison d'une somme et d'un produit des valeurs des bits. Pour calculer le OU binaire des nombres a et b, vous devez appliquer la formule suivante à leurs bits à chaque indice i :

(a | b)i = ai + bi - (ai x bi)

Voici un exemple palpable :

Expression Valeur Binaire Valeur Décimale
a 100111002 15610
b 1101002 5210
a | b 101111002 18810

C'est presque comme une somme de deux bits mais bridée à l'extrémité supérieure de sorte qu'elle ne dépasse jamais la valeur de un. Vous pourriez également prendre le maximum des deux bits de chaque paire pour obtenir le même résultat.

 

 

L'opérateur binaire XOR ou le OU exclusif

L'expression XOR signifie "OU exclusif" car il effectue une disjonction exclusive sur les paires de bits. En d'autres termes, chaque paire de bits doit contenir des valeurs binaires opposées pour produire un :

a 1 0 0 1 1 1 0 0
b 0 0 1 1 0 1 0 0
a ^ b 1 0 1 0 1 0 0 0

Visuellement, c'est une différence symétrique des paramètres de l'opérateur. Il y a trois bits activés dans le résultat où les deux nombres ont des valeurs binaires différentes. Les bits dans les positions restantes s'annulent car ils sont identiques.

Comme pour l'opérateur binaire OU, l'arithmétique de l'opérateur XOR implique une somme. Toutefois, alors que l'opérateur binaire OU fixe les valeurs à un, l'opérateur XOR les englobe avec une somme modulo deux :

(a ^ b)i = (ai + bi) mod 2

Un modulo est une fonction de deux nombres (le dividende et le diviseur), qui effectue une division et renvoie son reste.

Une fois encore, vous pouvez vérifier la formule en regardant l'exemple suivant :

Expression Valeur Binaire Valeur Décimale
a 100111002 15610
b 1101002 5210
a ^ b 101010002 16810

La somme de deux zéros ou de deux uns donne un nombre entier lorsqu'elle est divisée par deux, le résultat a donc un reste de zéro. Cependant, lorsque vous divisez la somme de deux valeurs binaires différentes par deux, vous obtenez une fraction avec un reste de un. Une formule plus simple pour l'opérateur XOR est la différence entre le maximum et le minimum des deux bits de chaque paire.

 

L'opérateur binaire NON

Le dernier des opérateurs logiques binaires est l'opérateur binaire NOT (~), qui n'attend qu'un seul paramètre, ce qui en fait le seul opérateur unaire. Il effectue la négation logique d'un nombre donné en inversant tous ses bits :

a 0 0 1 1 0 1 0 0
~ a 1 1 0 0 1 0 1 1

Les bits inversés sont un complément à un, ce qui transforme les zéros en uns et les uns en zéros. Il peut être exprimé arithmétiquement comme la soustraction des valeurs des bits individuels de un :

~ ai  = 1 - ai 

Voici un exemple montrant l'un des nombres utilisés auparavant :

Expression Valeur Binaire Valeur Décimale
a 100111002 15610
~a 11000112 9910

L'opérateur binaire NON est celui qui semble être le plus simple à utiliser. Tout ce que vous avez lu jusqu'à présent est basé sur l'hypothèse que les nombres sont représentés par des entiers non signés.

Remarque : Les types de données non signés ne vous permettent pas de stocker des nombres négatifs tels que -273, car il n'y a pas de place pour le signe dans un schéma binaire normal. Essayer de le faire entraînerait une erreur de compilation, une exception lors de l'exécution ou un débordement d'entier, selon le langage utilisé.