[B.4]
Valeurs booléennes, opérateurs booléens et portes logiquesUn ordinateur ne manipule que des 0 et des
1 (il y a de l’électricité ou il n’y en a pas). Ces deux
valeurs peuvent aussi être vues comme des “valeurs de vérité” :
0 = faux (en anglais
False)1 = vrai (en anglais
True)Ce type de donnée (qui ne peut prendre que ces deux valeurs) est une valeur booléenne (ou un booléen), du nom du mathématicien anglais George Boole (1815-1864). Un booléen tient donc, en théorie, sur un seul bit : c’est le plus petit type de donnée possible.
C’est la réponse naturelle à une question fermée : « l’interrupteur est-il allumé ? », « 3 est-il plus grand que 2 ? », « la porte est-elle ouverte ? »
| Électronique / circuits | Mathématiques / tables | Python |
|---|---|---|
| tension haute (5V, ou 3.3V) | 1 |
True |
| tension basse (0V) | 0 |
False |
Dans ce cours nous utiliserons surtout 0 et
1, plus lisibles dans les tableaux.
On peut combiner des booléens avec des opérateurs booléens (ou opérateurs logiques) : NON, ET, OU, auxquels on ajoute le OU exclusif.
Exemple : quelle est la réponse à la question : “la porte est-elle fermée ET la lumière allumée ?”
Dans un ordinateur, chaque opérateur est réalisé physiquement par un composant électronique : une porte logique. Elle reçoit un ou deux signaux en entrée et produit un signal en sortie. Un processeur moderne en contient plusieurs milliards. Chaque porte a un symbole utilisé dans les schémas.
Dans un schéma, les entrées sont à gauche, la sortie à droite, et les traits qui les relient sont les fils : ils transportent une valeur, 0 ou 1. Un fil peut se diviser pour alimenter plusieurs portes, mais deux fils ne peuvent jamais arriver sur une même entrée.
Pour décrire complètement un opérateur (ou une porte), il suffit d’énumérer tous les cas possibles dans une table de vérité.
Une table de vérité est un tableau qui donne la valeur de sortie pour chacune des combinaisons possibles des valeurs d’entrée.
Avec n entrées, il y a
lignes : 2 lignes pour 1 entrée, 4 lignes pour 2 entrées, 8 lignes pour
3 entrées, 16 pour 4 entrées…
Le NON est unaire : il ne prend qu’une entrée, et l’inverse.
a |
NON a |
|---|---|
| 0 | 1 |
| 1 | 0 |
Notations : NON a, not a (Python),
ou
(maths).
Le petit rond en sortie d’une porte signifie toujours « et on inverse le résultat ».
Le ET vaut 1 si et seulement si ses deux entrées valent 1 : « il faut le badge et le code ».
a |
b |
a ET b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Notations : a ET b, a and b (Python),
ou
(maths).
Le ET se comporte comme une multiplication : ne vaut 1 que si et valent 1.
Le OU vaut 1 dès qu’au moins une des deux entrées vaut 1. Attention : c’est un OU inclusif, il vaut aussi 1 quand les deux valent 1.
a |
b |
a OU b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Notations : a OU b, a or b (Python),
ou
(maths).
Le OU exclusif vaut 1 quand les deux entrées sont différentes. C’est le « ou » du restaurant : fromage ou dessert, mais pas les deux.
Le symbole est celui du OU, avec une barre supplémentaire à l’arrière.
a |
b |
a XOR b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Notations : a XOR b, a != b (Python, il n’y
a pas de mot-clé xor),
(maths).
Le XOR est un « détecteur de différence », mais aussi
l’addition binaire d’un bit :
,
,
,
dont on ne garde que le chiffre des unités, 0. Nous y
reviendrons avec le demi-additionneur.
On rencontre souvent les versions niées de ET et OU, plus simples à fabriquer avec des transistors. Leur symbole est celui du ET ou du OU, suivi du petit rond :
a NAND b = NON (a ET b)a NOR b = NON (a OU b)

a |
b |
a NAND b |
a NOR b |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
La porte NAND est universelle : avec uniquement des portes NAND, on peut reconstruire NON, ET, OU, XOR… et donc n’importe quel circuit logique. Idem pour NOR.
Nous utiliserons un simulateur de circuits logiques (depuis Capytale) : on y place des entrées, des portes, une sortie, puis on bascule les entrées pour observer la sortie.
Le simulateur permet de vérifier une table de vérité, pas de la remplacer : en devoir, il faut savoir la construire à la main.
Dès qu’on assemble plusieurs portes, la sortie de l’une devient l’entrée d’une autre. Pour comprendre ce que fait le circuit, on établit sa table de vérité.
Pour dresser la table de vérité d’un circuit :
n) et dessiner un
tableau de
lignes,Les colonnes intermédiaires sont le point essentiel : on ne cherche jamais à deviner la sortie directement, on avance porte par porte.
Ce circuit a 3 entrées et 3 portes :
E1 et E2, de
sortie A,E2 et E3, de
sortie B,A et B, et donne
la sortie S.E2 alimente deux portes : le fil se
divise. Avec 3 entrées, la table a
lignes :
E1 |
E2 |
E3 |
A = E1 ET E2 |
B = E2 OU E3 |
S = A XOR B |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 | 0 |
La sortie vaut donc 1 dans 5 cas sur 8.
Dressez, sur le même modèle (avec les colonnes intermédiaires), la table de vérité des circuits 2 et 3 de la feuille Exos portes logiques.
Plutôt qu’un schéma, on peut écrire une expression
booléenne : une formule qui combine des variables booléennes
avec NON, ET, OU et
XOR. Le circuit 1 précédent s’écrit :
Schéma et expression sont deux écritures du même objet ; il faut savoir passer de l’une à l’autre :
Comme en mathématiques ( et non 20), les opérateurs booléens ont des priorités :
Par ordre de priorité décroissante :
NON,ET,OU (et XOR).À priorité égale, on évalue de gauche à droite.
Pour retenir : ET se comporte comme la multiplication,
OU comme l’addition — et la multiplication est
prioritaire.
a OU b ET c se lit a OU (b ET c)NON a ET b se lit (NON a) ET b — et
pas NON (a ET b), qui est un NAND !La table de vérité montre la différence :
a |
b |
(NON a) ET b |
NON (a ET b) |
|---|---|---|---|
| 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 0 | 0 |
Les deux colonnes sont différentes : les parenthèses comptent.
En cas de doute, mettez des parenthèses : c’est toujours correct, et plus lisible.
Même méthode que pour un circuit : une colonne intermédiaire par opérateur, en respectant les priorités.
Exemple : table de vérité de :
a |
b |
S |
||||
|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 |
La colonne S est celle du XOR : nous
venons de reconstruire un OU exclusif avec des NON, des ET et un OU.
Deux expressions sont équivalentes si elles ont la même table de vérité. C’est le seul critère, peu importe leur écriture ou leur nombre de portes.
Elles permettent de simplifier une expression, donc de fabriquer le circuit avec moins de portes :
| Règle | Écriture |
|---|---|
| élément neutre | a ET 1 = a ; a OU 0 = a |
| élément absorbant | a ET 0 = 0 ; a OU 1 = 1 |
| idempotence | a ET a = a ; a OU a = a |
| complément | a ET (NON a) = 0 ; a OU (NON a) = 1 |
| double négation | NON (NON a) = a |
| lois de De Morgan | NON (a ET b) = (NON a) OU (NON b) |
NON (a OU b) = (NON a) ET (NON b) |
Comment faire faire une addition binaire à un circuit ? Commençons
par le plus simple : additionner deux bits
E1 et E2. Reprenons la table d’addition
binaire vue au chapitre B.1 :
Le dernier cas est la clé : le résultat ne tient pas sur un bit. Il faut donc deux sorties :
S (le chiffre des unités du
résultat),R (le chiffre suivant, à
reporter sur la colonne de gauche).E1 |
E2 |
Résultat de l’addition | Retenue R |
Somme S |
|---|---|---|---|---|
| 0 | 0 | 00 |
0 | 0 |
| 0 | 1 | 01 |
0 | 1 |
| 1 | 0 | 01 |
0 | 1 |
| 1 | 1 | 10 |
1 | 0 |
Regardons chaque colonne de sortie séparément :
R vaut 1 uniquement quand E1 et
E2 valent 1 : c’est la table du ET,S vaut 1 quand E1 et E2
diffèrent : c’est la table du XOR.Deux portes suffisent donc à additionner deux bits. Ce circuit s’appelle le demi-additionneur (half adder).
E1 et E2 alimentent chacune les deux portes
: les fils se divisent.
Construisez ce circuit dans le simulateur, et vérifiez les 4 lignes de sa table de vérité en basculant les entrées.
Parce qu’il ne fait que la moitié du travail : quand on additionne deux nombres de plusieurs bits, chaque colonne doit additionner trois bits, les deux bits du rang plus la retenue de la colonne précédente.
1 1 1 1 <- retenues
1 0 1 1
+ 0 1 1 1
---------
1 0 0 1 0
Le circuit qui additionne trois bits (deux bits + une retenue entrante) s’appelle l’additionneur complet (full adder), et se fabrique… avec deux demi-additionneurs et une porte OU. Bout à bout, 8, 32 ou 64 additionneurs complets forment l’unité de calcul d’un processeur.
L’addition a été entièrement ramenée à de la logique booléenne. C’est le principe fondamental de l’ordinateur : tout ce qu’il calcule est fait avec des portes logiques.