Introduction

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.

Les opérateurs de base

L'opérateur NON (not) : la négation

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 ?

Code de déblocage de la correction :

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
  1. É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.

  2. Tester la fonction ainsi :

    >>> print("non(True) renvoie", non(True))
    False 
    >>> print("non(False) renvoie", non(False))
    True 
  3. 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 :

    ou

Code de déblocage de la correction :

L'opérateur ET (and) : la conjonction

L'opérateur de conjonction, noté and ou & ou . qui se lit et, est une fonction définie sur 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
  1. É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
  2. Quelle opération arithmétique simple retrouve-ton dans cette table de vérité ?

Code de déblocage de la correction :

  1. É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.

  2. les appels de la fonction :

    le résultat attendu

  3. 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 :

Code de déblocage de la correction :

Attention à ne pas confondre en langage Python and et & !


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.

  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.

  2. Dessiner un circuit constitué d'une porte ET et d'une porte NON, qui sélectionne le périphérique 2.

  3. Dessiner un circuit permettant de sélectionner le périphérique 0.

Code de déblocage de la correction :

L'opérateur OU (or) : la disjonction

L'opérateur de disjonction, noté or ou | ou + qui se lit ou, est une fonction définie sur 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
  1. Établir la table de vérité de l'opérateur de disjonction.

  2. Quelle opération arithmétique binaire simple retrouve-ton dans cette table ?

Code de déblocage de la correction :

  1. É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.

  2. l'appel de la fonction :

    le résultat attendu

  3. É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.

  4. 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 :

Code de déblocage de la correction :

  1. 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
  2. Est-il correct d'affirmer que ~(x & y) est identique à (~x) | (~y) ?

Code de déblocage de la correction :

Attention à ne pas confondre en langage Python or et | !

Le ou exclusif (xor)

L'opérateur ou exclusif ou xor, noté ^ est une fonction définie sur 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.

Code de déblocage de la correction :

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 :

  1. É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 ^.

  2. l'appel de la fonction :

    le résultat attendu

  3. É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.

  4. les appels de la fonction :

    le résultat attendu

  5. Tester cette fonction en affichant la table de vérité en python.

  6. L'objectif est d'avoir :

Code de déblocage de la correction :

  1. 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.

  2. Recopier et compléter la table de vérité de (𝑬𝟏 ⊕ 𝑬𝟐) ⊕ 𝑬𝟐 :

Code de déblocage de la correction :

Voici un extrait de sujet de bac :

Code de déblocage de la correction :

Une application : les masques de sous-réseau

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.

Un ordinateur a pour IP 192.168.0.42, et son masque de sous-réseau est 255.255.255.0.
Pour obtenir l’adresse du sous-réseau de l’ordinateur, on effectue alors un AND entre les octets de l’IP et les octets du masque. En représentation binaire, cela donne :

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 :

On considère un PC dont l'adresse IP est : 192.168.20.10 / 24.

  1. Combien d'octets sont nécessaires pour composer une adresse IP(V4) ?

    1. Dans toute la suite, on considère le tableau suivant qui sera à compléter progressivement :

    2. Compléter la ligne 2 du tableau ci-dessus en convertissant la notation décimale de l'adresse IP en notation binaire.

    3. 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.

    4. En déduire, à la ligne 4 du tableau ci-dessus, l'écriture décimale pointée du masque de sous-réseau.

      1. 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.

      2. Compléter la ligne 5 du tableau ci-dessus avec l'adresse binaire du réseau.

      3. Compléter la ligne 6 du tableau avec l'adresse décimale du réseau.

Code de déblocage de la correction :

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.

Code de déblocage de la correction :

Exercices

On considère la fonction multiplexeur, notée mux définie par mmux(x,y,z)=((~x) & y) | (x & z)
Complétez la table suivante:
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

Code de déblocage de la correction :

x et y sont deux valeurs booléennes.

  1. Dans quel(s) cas l'expression booléenne x & (~y) est-elle vraie ?

  2. Dans quel(s) cas l'expression booléenne (~x) & (~y) est-elle vraie ?

Code de déblocage de la correction :

a, b et c sont trois valeurs booléennes.

  1. Dans quel(s) cas l'expression booléenne a | (b & c) est-elle vraie ?

  2. Dans quel(s) cas l'expression booléenne a | (b & (~c)) est-elle vraie ?

Code de déblocage de la correction :

  1. Montrer que ( x & y) = ~((~x) | (~y)).

  2. Montrer que (x | y) = ~((~x) & (~y)).

Code de déblocage de la correction :

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

Code de déblocage de la correction :

QCM

Questions issues de la Banque Nationale de Sujets

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

Autres QCM

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

Générateur aléatoire de questions sur les réseaux

Il faut actualiser la page pour changer de question. Propriétaire de la ressource : le site GeNumsi en licence CC BY_NC-SA

Savoirs et savoir-faire

  1. Savoir la table de vérité du NON, du ET et du OU.

  2. Savoir la notion de OU exclusif.

  1. Savoir dresser la table d'une expression booléenne.

  2. Savoir réaliser quelques applications directes sur les expressions booléennes.

Licence Creative Commons
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