Représentation des booléens

DéfinitionBooléens

Se dit d'une variable susceptible de prendre deux valeurs s'excluant mutuellement :

Vrai / Faux

1 / 0

(source : https:larousse.fr/dictionnaires/)

Le nom est issu des théories du mathématicien, philosophe britannique Georges Boole. Il est le créateur de la logique moderne fondée sur structure algébrique et sémantiques : variables, opérateurs et fonctions.

ComplémentCas des mathématiques

En mathématiques une proposition peut être considérée comme un variable booléenne.

Une proposition mathématique est un énoncé déclaratif dont on peut dire s’il est vrai (valeur 1) ou s’il est faux (valeur 0).

ExempleExemple en Python

1
a=True
2
type(a)
3
bool
4
5
b=(2==3)
6
b
7
False
8
type(b)
9
bool
10
11
c=(5<=10)
12
c
13
True
14
type(c)
15
bool

Fondamental

Les circuits des ordinateurs sont fabriqués à partir de portes logiques élémentaires, elles-mêmes construites à partir de transistors où les valeurs booléennes 0 et 1 sont matérialisées par des courants électriques. Les portes logiques permettent de construire des fonctions booléennes arbitraires, telles que des décodeurs ou des additionneurs. Le langage Python permet d'appliquer des opérations bit-à bit sur les représentations en base 2 des entiers.

RemarqueNota Bene

La notion de portes logiques sera abordée dans le cours sur l'architecture de l'ordinateur.

Les fonctions booléennes élémentaires

Définition

Une fonction logique est une fonction qui prend un ou plusieurs bits en entrée et qui produit un unique bit en sortie.

DéfinitionLa fonction élémentaire NOT ou NON \(\lnot (x)\)

Elle n'a qu'un seul bit en entrée (x) et son unique bit en sortie \(\lnot (x)\) vaut 1 quand l'entrée vaut 0 et inversement.

la fonction NOT est la négation de x.

DéfinitionTable logique ou de vérité

Pour représenter le calcul réalisé par cette fonction logique, on utilise une table dit logique ou de vérité qui relie les valeurs de sortie avec les valeurs d'entrées.

FondamentalTable logique de la fonction NOT

NOT

x

\(\lnot(x)\)

0

1

MéthodeLa fonction not en langage Python

1
for p in (True , False) :
2
    print (p, not(p))

ExempleSituation en algorithmique

activer désactiver un son, un bouton

Les nombres non nuls : if x !=0

DéfinitionLa fonction AND ou ET

Cette fonction a deux valeurs en entrée et retourne vrai quand les deux valeurs sont vraies et faux dans tous les autres cas.

La fonction AND est la conjonction de x et y.

FondamentalTable logique de la fonction AND

AND

x

y

\(\land (x,y)\)

0

1

0

1

0

0

1

1

MéthodeLa fonction AND en langage Python

1
for p in (True , False ) :
2
	for q in (True , False ) :
3
		print (p, q, p and q)

Exemplesituation en algorithmique

tester si x appartient à ]-2 ;3[

if (x>-2) and (x<3) :

DéfinitionLa fonction OR, OU

Cette fonction a deux valeurs en entrée et retourne vrai quand au moins l'une des deux valeurs est vraie et faux sinon.

La fonction OU est aussi appelée disjonction de x et y.

ExempleDe la vie courante

Ce médicament peut provoquer des troubles de l’équilibre ou de la vue.

FondamentalTable logique de la fonction OR

OR

x

y

\(\lor (x,y)\)

0

1

0

1

0

0

1

1

MéthodeLa fonction OR en langage Python

1
for p in (True , False ) :
2
	for q in (True , False ) :
3
		print (p, q, p or q)

Exemplesituation en algorithmique :

tester si x appartient à \(]-\infty ;-3[ U ]3 ; + \infty[\)

1
if (x<-3) or (x>3) :
2
	sqrt ({x**2-9)

Autres fonctions booléennes

Fondamental

Les trois fonctions booléennes élémentaires : \(\lnot(x)\), \(\land (x,y)\), \(\lor (x,y)\) forment une base complète pour la définition des autres fonctions booléennes : toute fonction booléenne est définie par une combinaison de ces trois fonctions.

Table de vérité d'une fonction booléenne

Plus généralement la table de vérité d'une fonction booléenne de n bits en entrée contiendra 2^n ligne correspondant aux 2^n combinaisons possibles des entrées.

Sur les 3 premières fonctions élémentaires on a respectivement 2, 4 et 4 lignes.

Sur 3 entrées on aura 8 lignes :

x

y

z

f(x,y,z)

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

1

0

1

0

1

0

1

ExempleLa fonction XOR , OU exclusif

La fonction OU exclusif est un opérateur binaire noté \(x \oplus y\). Il correspond à l'utilisation du "ou" dans le langage courant. Comme le cas de la carte d'un restaurant où il est indiqué fromage ou dessert. En fait les deux sont exclusifs d'un de l'autre car peut prendre soit l'un soit l'autre mais pas les deux.

FondamentalTable logiques de la fonction XOR

XOR

x

y

\(x \oplus y\)

0

1

0

1

0

0

1

1

0

1

1

0

ComplémentLa fonction XOR comme combinaison de fonction élémentaires

Vérifier les égalités suivantes à l'aide d'une table de vérité.

\(p \oplus q = (p \lor q) \land \lnot( p \land q)\)

\(p \oplus q = (p \land \lnot q) \lor ( \lnot p \land q)\)

Exemple

Écrire en Python une fonction xor(x,y) qui réalise la fonction booléenne du même nom sur les booléens.

def xor(x,y) :

return (x and not y) or (not x and y)

Exemple

Définir une fonction booléenne f sur deux variables x et y qui vaut 1 si et seulement si les deux variables ont la même valeur (qu'elle soit 0 ou 1), en utilisant les opérations NON ET OU ou OU exclusif. Donner sa table de vérité.

\(f(x,y) = -(x \oplus y)\) ou \(f(x,y) = (x \land y ) \lor (-x \land -y)\)

avec la table de vérité suivante :

x

y

f(x,y)

0

0

1

1

0

1

0

1

1

0

0

1

ExempleApplication : chiffrement à clé

Voici un exemple numérique de la méthode précédente :

M = 0110101011010100 (message en clair)

K = 0101011011100110 (la clé ; à garder secrète bien évidemment)

Convenons que le symbole ⊕ représente ici l'application de l'opérateur XOR à chacun des bits

Pour chiffrer, il faut utiliser la table de vérité: "M" est votre message et "K" représente la clé secrète.

Donc: M ⊕ K = C. Le "C" représente le message chiffré:

Chiffrement : C = M ⊕ K = 0011110000110010 (message chiffré)

Déchiffrement : M = C ⊕ K = 0110101011010100 (message déchiffré)

Les fonctions élémentaires avec Python

Python dispose d'opérateurs qui agissent directement sur les nombres au niveau des bits. Ces opérateurs sont appelés opérateurs bit-à-bit ou bitwise en anglais.

  • & réalise un et logique entres les bits de deux nombres.

  • | réalise un ou logique

  • ^ réalise un ou exclusif

  • ~ réalise le complément à 1 en inversant les bits d'un nombre.

  • >> et << sont des opérateurs de décalage prenant deux paramètres : le nombre à décaler et le nombre de positions à décaler. Ces opérations sont efficaces pour multiplier ou diviser un nombre par une puissance de 2.

1
>>>bin(0b0101 & 0b1100)
2
'0b100'
3
>>> bin(0b0101|0b1100)
4
'0b1101'
5
>>> bin(0b0101^0b1100)
6
'0b1001'
7
>>> bin(0b1100>>2)
8
'0b11'
9
>>> bin(0b1100<<3)
10
'0b1100000'

ExempleApplication : chiffrement à clé

Écrire le programme Python sous la forme d'une fonction qui chiffre un message à l'aide d'une clé comme indiqué dans l'exemple de la partie précédente.

Elle prendra en paramètre le message et la clé sous forme de nombres binaires (on prendra une clé de la même longueur que le message et qui renvoie le message codé sous forme binaire.

fonctions avancées.

codeur / décodeur

Ces fonctions sont utiles en informatique pour passer d'un numéro à un nombre et inversement.

  • Codeur : une touche du clavier à son codage ASCII

  • Décodeur : un nombre à un numéro de programme.

FondamentalDécodeur

Prenons un compteur de 2 bits (4 nombres) il peut générer 4 sorties correspondant à 4 programmes (prélavage, lavage rinçage et essorage sur une machine à laver le linge par exemple)

Sa table logique sera :

\(e_1\)

\(e_0\)

\(s_0\)

\(s_1\)

\(s_2\)

\(s_3\)

0

0

1

1

0

1

0

1

1

0

0

0

0

1

0

0

0

0

1

0

0

0

0

1

Le décodeur peut aussi se définir à partir des fonctions élémentaires :

  • \(s_0 = \lnot e_0 \land \lnot e_1\) ou \(s_0 = \lnot(e_0 \lor \lnot e_1)\)

  • \(s_1 = \lnot e_0 \land e_1\)

  • \(s_2 =  e_0 \land \lnot e_1\)

  • \(s_3 =  e_0 \land e_1\)

Un décodeur n bits possédera \(2^n\) sorties. Les n bits en entrées sont utilisés pour :

  • mettre à 1 la sortie dont le numéro est égal au nombre codé en binaire par les entrées.

  • mettre les autres sorties à 0

Additionneur

C'est une fonction de base en informatique : l'addition de deux nombres binaires.

Pour additionner des nombres binaires de n bits, il faut déjà un additionneur 1 bit qui réalise l'addition de deux nombres de 1 bit. Lui même est construit à partir de ce qu'on appelle un demi-additionneur.

FondamentalDemi-additionneur

Il prend en entrée les deux bits \(e_0\) et \(e_1\) et il envoie sur une sortie s la somme \(e_0 + e_1\) et sur un autre sortie c la retenue éventuelle.

Voici la table logique de ce demi-additionneur.

entrées

sorties

\(e_0\)

\(e_1\)

s

c

0

0

1

1

0

1

0

1

0

1

1

0

0

0

0

1

Donner les deux fonctions booléennes correspondantes respectivement à s et c.

\(s= e_0 \oplus e_1\)

\(c= e_0 \land e_1\)

Additionneur un bit

Pour réaliser l'additionneur 1 bit, il faut prendre en compte la retenue éventuelle \(c_0\) de l'addition des deux bits précédents. Ainsi un additionneur complet prend en entrée les deux bits \(e_0 + e_1\) et la retenue noté \(c_0\) de l'addition précédente. En revanche les sorties sont inchangées.

entrées

sorties

\(e_0\)

\(e_1\)

\(c_0\)

s

c

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

1

0

1

0

1

0

1

0

1

1

0

1

0

0

1

0

0

0

1

0

1

1

1

Donner les deux fonctions booléennes correspondantes :

  • à s en fonction de \(e_0, e_1, c_0\)

  • et c en fonction de \(e_0, e_1, c_0\)

\(s= e_0 \oplus e_1 \oplus c_0\)

\(c= (e_0 \land e_1) \lor ((e_0 \oplus e_1)\land c_0)\)

Méthode

L'additionneur 1 bit est constitué électroniquement par deux demi-additionneurs :

  1. Le premier demi-additionneur prend en entrée \(e_0 \)et \(e_1\) et renvoie un \(s_0\) et un \(c_1\).

  2. Le deuxième demi-additionneur prend en entrée \(s_0\) et \(c_0\) et renvoie donc \(s\) et \(c_2\).

  3. Enfin la sortie \(c\), retenue finale vaut 1 si \(c_1\) ou \(c_2\) vaut 1.