Un cristal de Si est de type P; on y a créé deux zones de type N. Entre ces deux zones N, on a oxydé le silicium. Puis déposé une couche de cuivre.
Acronymes :
Dans un circuit numérique, on ne considère que deux niveaux de tension:
Le courant passe | De 3 V à 5 V | Niveau logique 1 | true |
---|---|---|---|
Le courant ne passe pas | De 0 V à 0,05 V | Niveau logique 0 | false |
Pour ces niveaux, le FET a une résistance pratiquement infinie (niveau 0) ou pratiquement nulle (niveau 1). On utilise donc le circuit simplifié suivant :
On considère le circuit suivant, avec une résistance entre le MOSFET et le "+" de l'alimentation, et l'autre côté du MOSFET relié à la masse.
Lorsque l'interrupteur est ouvert (niveau logique 0), il n'y a pas de courant et la tension de sortie est 5 V; lorsque l'interrupteur est fermé, le MOSFET est en court-circuit et la tension de sortie est nulle. La fonction logique représentée effectue les transformations suivantes: 0→1 et 1→0. C'est la négation logique, que Boole notait 1-x. En effet, voici le tableau de valeurs de cette fonction :
x | 0 | 1 |
---|---|---|
1-x | 1 | 0 |
En Python, la négation se note not
. Par exemple, not True
est la même
chose que False
. Le schéma logique d'une porte "non" est un cercle :
On branche deux MOSFETs canal N en série :
Le courant ne passe que si les deux entrées sont au niveau logique 1: On réalise l'opération
"et" que George Boole notait x×y. En Python,
la conjonction s'écrit and
; par exemple True and False
donne False... La
porte AND se dessine ainsi :
Si on branche deux MOSFETs en parallèle, le courant passe dès que l'un au moins des deux niveaux logiques d'entrée vaut 1 : On réalise alors un "ou inclusif" que George Boole notait "+". Voici la table de cette opération:
+ | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 1 |
On constate que, pour Boole, 1+1=1; Jean-Claude Van Damme
est donc fondamentalement booléen ! Dans l'algèbre de Boole, 1+1 ne peut pas être égal à 2 parce
qu'un booléen ne peut être égal qu'à 0 ou 1. Par contre, en Python, True or True
donne bien True
.
La porte OR se dessine ainsi:
Le "ou exclusif" ou XOR est presque le même que le ou inclusif. Sauf lorsque les deux entrées sont au niveau logique 1, auquel cas la sortie est nulle ("exclusif" veut dire qu'on ne doit pas avoir les deux entrées vraies). Voici la table de cette opération :
⊕ | 0 | 1 |
---|---|---|
0 | 0 | 1 |
1 | 1 | 0 |
En Python, le "ou exclusif" se note is not
. Ainsi, True is not True
est False
... La
porte XOR se dessine ainsi:
La négation d'une négation équivaut à une affirmation. Par exemple, not not 2+2==4
revient à 2+2==4
(soit True)
.
Autrement dit, cette porte ne fait que recopier l'entrée sur la sortie: C'est une porte "oui"...
La négation échange les conjonctions et disjonctions. Plus précisément:
La conjonction se comporte presque comme la multiplication, par exemple 0×x=0, 1×x=x et x×y=y×x...
La disjonction se comporte beaucoup comme l'addition, par exemple x+0=x et x+y=y+x. Mais x+1=x ce qui surprend un peu...
Comme a×(b+c)=a×b+a×c, on peut développer ou factoriser des expressions booléennes. Mais on peut intervertir les conjonctions et disjonctions:
a+(b×c)=(a+b)×(a+c). Par exemple, (1+1==1) or (2+2==4 and 2<3)
et (1+1==1 or 2+2==4) and (1+1==1 or 2<3)
sont équivalents.
Boole a appelé "idempotence" le fait que x×x=x et x+x=x
Un test est un algorithme qui ne s'exécute que si un booléen est vrai :
if 2+2==4: print("ouf!!!") else: print("Allo Houston nous avons un problème")
Une boucle à condition de sortie s'exécute tant qu'un booléen est vrai. Le script suivant ne s'arrête donc jamais :
while 2+2==4: print("c'est toujours vrai")