George Boole (1815-1864) est un logicien, mathématicien, philosophe britannique.
Il est le créateur de la logique moderne, fondée sur une structure algébrique et sémantique, que l’on appelle aujourd’hui
algèbre de Boole.
En 1938, Claude Shannon démontre que les circuits avec leurs deux états "ouvert" et "fermé" peuvent résoudre
tous les problèmes que l'algébre de Boole peut résoudre.
Notons B l’ensemble ${0~;~1}$ que nous appellerons ici ensemble des booléens.
Nous allons dans ce chapitre manipuler quelques opérateurs booléens, c’est à dire des fonctions d’une ou plusieurs variables dans B et à valeurs dans B.
Nous commençons par définir les opérateurs de base et
, ou
ainsi que non
.
Le nom de ces opérateurs vient de la convention d’associer 0 à “faux” et 1 à “vrai”.
Les variables du langage Python de type booléen peuvent prendre deux valeurs : False
et True
.
L'opérateur de négation, noté ~ ou ¬ ou
- qui se lit NON, est une fonction définie sur
B et à valeurs dans
B définie par ¬ 0=1
et ¬ 1=0
.
On représentera souvent la définition d'un opérateur booléen par sa table de vérité qui est plus simplement le tableau de valeurs de cet opérateur :
x | ¬ x |
---|---|
0 | 1 |
1 | 0 |
L'opérateur de négation transforme donc 0 en 1 et 1 en 0 ou encore faux en vrai et vrai en faux.
Voici une procédure mystere
écrite en langage Python :
def mystere():
print("|Entrée | Sortie|")
print("|-------|-------|")
for p in (True, False):
print("|",p,"|",not(p)," |")
print("|-------|-------|")
Quelle est le rôle de cette procédure mystere
?
On peut représenter les opérateurs booléens à l'aide de portes logiques, c'est-à-dire d'un schéma de circuit électronique réalisant l'opération logique de cet opérateur booléen.
Voici la porte logique associée à l'opérateur de négation :
Concrètement, ces portes logiques électroniques sont réalisées à l'aide de transistors.
En langage Python, la négation sur les booléens s'écrit not
.
>>> not True
False
>>> not False
True
Écrire la fonction non(a)
en Python où le paramètre a
peut prendre
comme argument True
et False
et qui renvoie la négation de a
.
Tester la fonction ainsi :
>>> print("non(True) renvoie", non(True))
False
>>> print("non(False) renvoie", non(False))
True
Faites un affichage de sa table de vérité à l'aide de la fonction non
est d'une boucle for
.
L'objectif est d'avoir :
ouL'opérateur de conjonction, noté and ou & ou . qui se lit et, est une fonction définie sur B² et à valeurs dans B
Cet opérateur est défini par l'équivalence :
x.y = 1
si et seulement si x
et y
valent tous deux 1.
Voici la porte logique associée à l'opérateur de conjonction :
En langage Python, la conjonction sur les booléens s'écrit and
.
>>> True and False
False
>>> not (False and True)
True
Établir la table de vérité de l'opérateur and en recopiant et complétant le tableau ci-dessous :
x | y | x.y |
---|---|---|
0 | 0 | |
0 | 1 | |
1 | 0 | |
1 | 1 |
Quelle opération arithmétique simple retrouve-ton dans cette table de vérité ?
Écrire le script de la fonction conjontion
en Python ayant deux paramètres
x
et y
qui peuvent prendre comme arguments True
et False
et qui
renvoie x.y
.
les appels de la fonction :
le résultat attendu
Faites un affichage de sa table de vérité à l'aide de la fonction conjonction
et
d'une boucle for
.
L'objectif est d'avoir :
Attention à ne pas confondre en langage Python and
et &
!
L'opérateur and
n'a de sens réel que pour des booléens et pour les chiffres 0
et 1
,
associés aux booléens False
et True
.
L'opérateur &
agit sur les bits un à un : il effectue un ET logique entre chaque bit des deux opérandes :
# 0b devant une succession de 0 et 1 signifie en python
# que le nombre doit être compris comme écrit en binaire.
# bin permet d'écrire en binaire un nombre entier.
>>> bin(0b11101010 & 0b11111000)
0b11101000
Un système est composé de 4 périphériques, numérotés de 0 à 3, et d'une mémoire,
reliés entre eux par un bus auquel est également connecté un dispositif ordonnanceur.
Les colonnes e0 et e1 du tableau suivant recensent les deux chiffres de l'écriture binaire
de l'entier n de la première colonne, nombre correspondant au numéro du périphérique.
numéro n du périphérique | écriture binaire de n sur deux bits | e1 | e0 |
---|---|---|---|
0 | 00 | 0 | 0 |
1 | 01 | 0 | 1 |
2 | 10 | 1 | 0 |
3 | 11 | 1 | 1 |
L'ordonnanceur attribue à deux signaux sur le bus de données les valeurs de e0 et e1 associées au numéro du circuit qu'il veut sélectionner. On souhaite construire à l'aide des portes ET et NON un circuit pour chaque périphérique.
Chacun des quatre circuits à construire prend en entrée deux signaux e0 et e1, le signal de sortie s valant 1 uniquement lorsque les niveaux de e0 et e1 correspondent aux bits de l'écriture en binaire du numéro du périphérique correspondant.
Par exemple, le circuit ci-dessous réalise la sélection du périphérique 3. En effet, le signal s vaut 1 si et seulement si e0 et e1 valent tous les deux 1.
Recopier sur la copie et indiquer dans le circuit ci-dessous les entrées e0 et e1 de façon à ce que ce circuit sélectionne le périphérique 1.
Dessiner un circuit constitué d'une porte ET et d'une porte NON, qui sélectionne le périphérique 2.
Dessiner un circuit permettant de sélectionner le périphérique 0.
L'opérateur de disjonction, noté or ou | ou + qui se lit ou, est une fonction définie sur B² et à valeurs dans B.
Cet opérateur est défini par l'équivalence :
x or y = 1
si et seulement si au moins l'une des
deux variables x
, y
est égale à 1.
On rappelle que le « ou » utilisé en logique est un ou inclusif.
Voici la porte logique associée à l'opérateur de conjonction :
En langage Python, la conjonction sur les booléens s'écrit or
.
>>> True or False
True
>>> not (False or True) or False
False
Établir la table de vérité de l'opérateur de disjonction.
Quelle opération arithmétique binaire simple retrouve-ton dans cette table ?
Écrire une procédure Python table_disjonction() qui affiche la table précédente.
Le 0 sera représenté en python par
False
et le 1 par True
. Utiliser or
.
l'appel de la fonction :
le résultat attendu
Écrire le script de la fonction disjontion(x,y)
en Python où les paramètres
x,y
peuvent prendre comme arguments 0 et 1 et qui renvoie x&y
.
les appels de la fonction :
le résultat attendu
Faites un affichage de sa table de vérité. à l'aide de la fonction conjonction() est d'une boucle for.
L'objectif est d'avoir :
Reproduire et compléter le tableau suivant :
x | y | ~x | ~y | x & y | ~(x & y) | (~x) | (~y) |
---|---|---|---|---|---|---|
0 | 0 | |||||
0 | 1 | |||||
1 | 0 | |||||
1 | 1 |
Est-il correct d'affirmer que ~(x & y)
est identique à (~x) | (~y)
?
Attention à ne pas confondre en langage Python or
et |
!
L'opérateur or
n'a de sens réel que pour des booléens et pour les chiffres 0
et 1
,
associés aux booléens False
et True
.
L'opérateur |
agit sur les bits un à un : il effectue un OU logique entre chaque bit des deux opérandes :
# 0b devant une succession de 0 et 1 signifie en python
# que le nombre doit être compris comme écrit en binaire.
# bin permet d'écrire en binaire un nombre entier.
>>> bin(0b101010 | 0b111000)
0b111010
xor
, noté ^ est une fonction définie sur B² et à valeurs dans B
Cet opérateur est défini par l’équivalence :
x ^ y = 1
si et seulement si exactement une des deux variables x
, y
est égale à
1.
Ou encore : x ^ y = 1
si et seulement si x ≠ y
.
En langage Python, le ou exclusif sur les booléens s'écrit ^
.
>>> True ^ True
False
>>> 0 ^ 1
1
Établir la table de vérité de l'opérateur de ou exclusif.
Claude Shannon faisait remarquer en 1935 que le OU exclusif est une addition sans retenue.
Vérifier que x ^ y = ( x & ~y ) | (~x & y )
.
Utiliser une table de vérité.
Cet exercice est traité en vidéo :
Écrire une procédure Python table_xor()
qui affiche la table précédente.
Le 0 sera représenté en python par
False
et le 1 par True
. Utiliser ^
.
l'appel de la fonction :
le résultat attendu
Écrire la fonction xor(x,y)
en python où les paramètres x,y
peuvent prendre comme
arguments 0 et 1 et qui renvoie x^y
.
les appels de la fonction :
le résultat attendu
Tester cette fonction en affichant la table de vérité en python.
L'objectif est d'avoir :
La fonction logique OU EXCLUSIF, appelée XOR et représentée par le symbole ⊕, fournit une sortie
égale à 1 si l’une ou l’autre des deux entrées vaut 1 mais pas les deux.
On donne la table de vérité de la fonction XOR.
Si on applique cette fonction à un nombre codé en binaire, elle opère bit à bit.
Poser et calculer l’opération : 11001110 ⊕ 01101011.
Recopier et compléter la table de vérité de (𝑬𝟏 ⊕ 𝑬𝟐) ⊕ 𝑬𝟐 :
Voici un extrait de sujet de bac :
Dans un réseau TCP/IP, un ordinateur a une adresse IP qui l’identifie de manière unique (comme un numéro de téléphone), ainsi qu’un masque de sous-réseau.
L’adresse IP et le masque de sous-réseau sont des groupes de 4 entiers positifs, codés
tous les deux sur 4 octets.
Le masque identifie à quel sous réseau d’Internet il fait partie, et permet d’obtenir l’adresse IP du sous-réseau à l’aide d’une opération booléenne.
IP : | 1 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 |
---|---|
Masque : | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 |
AND | |
adresse de sous-réseau | 1 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
Sur un processeur 32 bits, le AND est une opération primitive du processeur, donc l'opération de détermination du sous-masque réseau se fait en une instruction.
Dans cet exercice, on utilisera l'adressage CIDR composé d'une adresse IPv4 et
d'une indication sur le masque de sous réseau.
Par exemple : 172.16.1.10 / 16
signifie :
Adresse IP : 172.16.1.10
Masque de sous-réseau en notation CIDR : 16
On considère un PC dont l'adresse IP est : 192.168.20.10 / 24.
Combien d'octets sont nécessaires pour composer une adresse IP(V4) ?
Dans toute la suite, on considère le tableau suivant qui sera à compléter progressivement :
Compléter la ligne 2 du tableau ci-dessus en convertissant la notation décimale de l'adresse IP en notation binaire.
La notation CIDR /16 pour une adresse IP signifie que le masque de sousréseau a les 16 bits de poids fort de son adresse IP à la valeur 1 ; c'est-à-dire: 11111111.11111111.00000000.00000000.
Compléter la ligne 3 du tableau ci-dessus en donnant le codage binaire du masque de sous-réseau en notation CIDR /24.
En déduire, à la ligne 4 du tableau ci-dessus, l'écriture décimale pointée du masque de sous-réseau.
L'adresse du réseau peut s'obtenir en réalisant un ET logique bit à bit entre l'adresse IP du PC et le masque de sous-réseau.
Compléter la ligne 5 du tableau ci-dessus avec l'adresse binaire du réseau.
Compléter la ligne 6 du tableau avec l'adresse décimale du réseau.
Chercher l'adresse IP de votre ordinateur et de son masque sous-réseau. Sous windows, il faut taper la commande ipconfig
. Sous linux, il faut taper la commande ifconfig
Chercher l'adresse IP de votre téléphone portable. Vous pouvez vous aider de la fiche : Adresse IP
Ecrire l'adresse des sous-réseaux que vous avez trouvés.
mux
définie par
mmux(x,y,z)=((~x) & y) | (x & z)
x | y | z | ~x | (~x) & y | x & z | mux(x,y,z) |
---|---|---|---|---|---|---|
0 | 0 | 0 | ||||
0 | 0 | 1 | ||||
0 | 1 | 0 | ||||
0 | 1 | 1 | ||||
1 | 0 | 0 | ||||
1 | 0 | 1 | ||||
1 | 1 | 0 | ||||
1 | 1 | 1 |
x et y sont deux valeurs booléennes.
Dans quel(s) cas l'expression booléenne x & (~y)
est-elle vraie ?
Dans quel(s) cas l'expression booléenne (~x) & (~y)
est-elle vraie ?
a, b et c sont trois valeurs booléennes.
Dans quel(s) cas l'expression booléenne a | (b & c)
est-elle vraie ?
Dans quel(s) cas l'expression booléenne a | (b & (~c))
est-elle vraie ?
Montrer que ( x & y) = ~((~x) | (~y))
.
Montrer que (x | y) = ~((~x) & (~y))
.
Trouver l'expression de la fonction ssi (x,y) à l'aide des opérateurs booléens.
x | y | ssi(x,y) |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Propriétaire des ressources ci-dessous : ministère de l'Éducation nationale et de la jeunesse, licence CC BY SA NC
Voici une sélection de questions issues de la banque nationale de sujets, répondez à ces questions (attention, cette sélection n'est pas exhaustive).
On considère l'expression logique (a or b) and a
.
Quelle est sa table de vérité ?
Réponses :
A-
a | b | ? |
False | False | False |
False | True | True |
True | False | True |
True | True | True |
B-
a | b | ? |
False | False | False |
False | True | False |
True | False | True |
True | True | True |
C-
a | b | ? |
False | False | False |
False | True | False |
True | False | False |
True | True | True |
D-
a | b | ? |
False | False | False |
False | True | False |
True | False | False |
True | True | False |
La variable x
contient la valeur 3, la variable y
contient la valeur 4.
Quelle expression s'évalue en True
parmi les quatre propositions suivantes ?
Réponses :
A- x == 3 or y == 5
B- x == 3 and y == 5
C- x != 3 or y == 5
D- y < 4
Quelle table de vérité correspond à l'expression (non(A) ou B)
?
Remarque : dans les tables proposées, la première colonne donne les valeurs de A, la première ligne les valeurs de B.
Réponses :
A-
A/B | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 1 |
B-
A/B | 0 | 1 |
0 | 1 | 0 |
1 | 1 | 1 |
C-
A/B | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
D-
A/B | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
Choisir une expression booléenne pour la variable S
qui satisfait la table de vérité suivante.
A | B | S |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 1 |
1 | 1 | 1 |
Réponses :
A- A ou (non B)
B- (non A) ou B
C- (non A) ou (non B)
D- non (A ou B)
Soient $P$ et $Q$ deux formules logiques telles que $P$ est vraie et $Q$ est fausse.
Quelle est la valeur de l'expression $(P\ ET\ Q)\ OU\ (NON\ (P)\ OU\ Q)$ ?
Réponses :
A- vraie
B- fausse
C- ni vraie ni fausse
D- vraie et fausse en même temps
Les QCM suivants sont des QCM modifiés à partir de QCM se trouvant sur le site https://genumsi.inria.fr.
Auteur : François Henry
Laquelle de ces propositions est fausse ?
Réponses :
A- (a ET b) ET c
est équivalent à a ET (b ET c)
.
B- (a OU b) OU c
est équivalent à a OU (b OU c)
.
C- (a OU b) ET c
est équivalent à (a OU b) ET (a OU C)
.
D- NON(a OU b)
est équivalent à (NON a) ET (NON b)
.
Autrice : Nathalie LE GAC
On a saisi le code suivant :
a = 5
b = 10
c = (a > 50 and b == 10)
d = (a == 3 or not(b != 15))
print("c vaut", c,"et d vaut", d)
Réponses :
A- c vaut True et d vaut True
B- c vaut False et d vaut True
C- c vaut True et d vaut False
D- c vaut False et d vaut False
Il faut actualiser la page pour changer de question. Propriétaire de la ressource : le site GeNumsi en licence CC BY_NC-SA
Savoir la table de vérité du NON, du ET et du OU.
Savoir la notion de OU exclusif.
Savoir dresser la table d'une expression booléenne.
Savoir réaliser quelques applications directes sur les expressions booléennes.
Les différents
auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative
Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0
International