Vous êtes sur la page 1sur 152

Introduction l'Informatique

Vincent Boyer et Jean Mhat


5 fvrier 2016

Copyright (C) 20092016 Jean Mhat


Permission is granted to copy, distribute and/or modify this document under
the terms of the GNU Free Documentation License, Version 1.3 or any later
version published by the Free Software Foundation ; with no Invariant Sections,
no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included
in the section entitled "GNU Free Documentation License".

Table des matires

1 Introduction
1.1
1.2

1.3

Dnitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Organisation gnrale d'un ordinateur

. . . . . . . . . . . . . . .

1.2.1

La mmoire . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.2

L'unit centrale . . . . . . . . . . . . . . . . . . . . . . . .

1.2.3

Les units d'entres sorties

. . . . . . . . . . . . . . . . .

Excution d'un programme

. . . . . . . . . . . . . . . . . . . . .

10

1.3.1

Programme original

. . . . . . . . . . . . . . . . . . . . .

10

1.3.2

Programme traduit pour l'ordinateur . . . . . . . . . . . .

10

1.3.3

Instruction de base . . . . . . . . . . . . . . . . . . . . . .

11

1.3.4

Codage des instructions

. . . . . . . . . . . . . . . . . . .

11

1.3.5

Traduction du programme . . . . . . . . . . . . . . . . . .

13

1.3.6

L'unit de controle, le PC . . . . . . . . . . . . . . . . . .

13

1.4

La brique de base : le transistor . . . . . . . . . . . . . . . . . . .

15

1.5

Rsum

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

1.6

Exercices

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

2 La reprsentation des nombres entiers positifs

18

2.1

Pour les matheux . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

2.2

Pour les programmeurs . . . . . . . . . . . . . . . . . . . . . . . .

18

Pour les autres

19

2.3

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.3.1

Qu'est-ce qu'un nombre ?

2.3.2

La notation usuelle : numration en base dcimale

2.3.3

D'autres reprsentations usuelles

. . . . . . . . . . . . . .

20

2.3.4

Nommer les chires d'un nombre . . . . . . . . . . . . . .

21

2.3.5

La valeur d'un nombre dcimal . . . . . . . . . . . . . . .

21

2.3.6

Reprsentation des nombres en base constante

22

. . . . . . . . . . . . . . . . . .
. . . .

. . . . . .

19
20

2.4

2.3.7

Conversions vers la base 10

. . . . . . . . . . . . . . . . .

23

2.3.8

Conversion depuis la base dix . . . . . . . . . . . . . . . .

25

Conversions entre binaire, octal et hexadcimal . . . . . . . . . .

28

2.4.1

Pour les matheux . . . . . . . . . . . . . . . . . . . . . . .

28

2.4.2

Pour les autres

29

2.4.3

Rcapitulation des conversions entre les bases 10, 2, 8 et 16 29

. . . . . . . . . . . . . . . . . . . . . . . .

2.5

Rsum

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

2.6

Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.7

Supplment : le binaire facile

32

2.8

Supplment : la commande

. . . . . . . . . . . . . . . . . . . .

gnome-calculator

. . . . . . . . . .

3 Oprations en binaire
3.1
3.2

Addition en base 2

34
. . . . . . . . . . . . . . . . . . . . . . . . . .

La multiplication en base 2

. . . . . . . . . . . . . . . . . . . . .

35

La multiplication en base 10 sans table . . . . . . . . . . .

36

3.2.2

Le dcalage gauche et droite

36

3.2.3

Un algorithme de multiplication en binaire

3.2.4

Poser la multiplication en base 2

Rsum

3.4

Exercices

. . . . . . . . . . . . . .
. . . . . . . .

37

. . . . . . . . . . . . . .

38

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

4 Reprsentation des nombres signs

4.2

34

3.2.1

3.3

4.1

33

Le bit de signe, la notation en excdent

40
. . . . . . . . . . . . . .

40

4.1.1

Le bit de signe

. . . . . . . . . . . . . . . . . . . . . . . .

41

4.1.2

La reprsentation en excdent . . . . . . . . . . . . . . . .

41

Reprsentation des nombres signs en complment 2

. . . . . .

42

. . . . . . . . . . . . . .

42

4.2.1

Les bases du complment deux

4.2.2

Calculer l'oppos d'un nombre en complment 2

. . . .

43

4.2.3

L'arithmtique en complment 2

. . . . . . . . . . . . .

45

4.2.4

La multiplication . . . . . . . . . . . . . . . . . . . . . . .

46

4.3

Rsum

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

4.4

Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

5 Calculer des ordres de grandeur entre base 2 et base 10


5.1

Exercices

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6 Reprsenter les nombres qui ne sont pas entiers


6.1

Reprsentation des nombres fractionnels . . . . . . . . . . . . . .

48
49

51
51

6.1.1

Conversion de la partie fractionnelle d'un nombre de la


base 10 vers la base 2

6.1.2

. . . . . . . . . . . . . . . . . . . .

52

Conversion de la partie fractionnelle d'un nombre de la


base 2 la base 10 . . . . . . . . . . . . . . . . . . . . . .

53

6.2

Reprsentation des nombres en virgule xe

. . . . . . . . . . . .

53

6.3

Reprsentation des nombres en virgule ottante . . . . . . . . . .

54

6.3.1

Virgule ottante en base 10 . . . . . . . . . . . . . . . . .

54

Virgule ottante en base 2 . . . . . . . . . . . . . . . . . . . . . .

55

6.4.1

Exemples de nombres en virgule ottante

. . . . . . . . .

55

6.4.2

Les nombres en virgule ottante dans la mmoire . . . . .

55

6.4.3

Flottants ou rels . . . . . . . . . . . . . . . . . . . . . . .

56

La norme IEEE754 . . . . . . . . . . . . . . . . . . . . . . . . . .

56

6.4

6.5

6.5.1

Cas particuliers . . . . . . . . . . . . . . . . . . . . . . . .

57

6.6

Rsum

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

6.7

Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

58

6.8

Supplment : un outil de calcul . . . . . . . . . . . . . . . . . . .

59

7 Reprsentation des caractres

61

7.1

Les codes de caractres . . . . . . . . . . . . . . . . . . . . . . . .

61

7.2

Le code ASCII

61

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

7.2.1

Organisation du code ASCII

. . . . . . . . . . . . . . . .

61

7.2.2

Les limites du code ASCII . . . . . . . . . . . . . . . . . .

62

7.3

La norme iso8859 : une extension du code ASCII . . . . . . . . .

63

7.4

Unicode : un codage sur seize bits

. . . . . . . . . . . . . . . . .

64

7.5

UTF : un codage longueur variable . . . . . . . . . . . . . . . .

64

7.6

la commande

7.7

Rsum

7.8

Exercices

7.9

file

. . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

Supplment : exercice type corrig sur les conversions . . . . . . .

68

7.10 Supplment : saisir des caractres divers au clavier

. . . . . . . .

70

7.10.1 Choisir Compose avec les versions Ubuntu de 2013 . . . .

70

7.10.2 Taper un caractre non-standard . . . . . . . . . . . . . .

70

8 Algbre de Boole
8.1

Les fonctions logiques


8.1.1

8.2

66

72
. . . . . . . . . . . . . . . . . . . . . . . .

72

Fonctions logiques et tables de vrit . . . . . . . . . . . .

74

Simplication des expressions logiques


8.2.1

. . . . . . . . . . . . . . .

78

Simplications algbriques des expressions logiques . . . .

78

8.2.2

8.2.3

Simplication des expressions logiques avec les tables de


Karnaugh . . . . . . . . . . . . . . . . . . . . . . . . . . .

79

Simplication des expressions logiques en pratique

. . . .

85

8.3

Rsum

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

86

8.4

Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

86

9 Des dispositifs pour calculer


9.1

Les relais

9.2

Les transistors

9.3

89

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

89

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

91

9.2.1

La structure d'un transistor . . . . . . . . . . . . . . . . .

91

9.2.2

Les transistors N et P

. . . . . . . . . . . . . . . . . . . .

92

9.2.3

L'inverseur CMOS

. . . . . . . . . . . . . . . . . . . . . .

92

9.2.4

Le ET et le OU en CMOS . . . . . . . . . . . . . . . . . .

93

9.2.5

Ralisation des circuits . . . . . . . . . . . . . . . . . . . .

94

Exercices

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10 Portes logiques et circuits combinatoires

94

95

10.1 Codage des chires . . . . . . . . . . . . . . . . . . . . . . . . . .

95

10.2 Un exemple : conception d'un additionneur

. . . . . . . . . . . .

96

10.2.1 Les circuits de base . . . . . . . . . . . . . . . . . . . . . .

96

10.2.2 Equivalence entre fonction et circuit

. . . . . . . . . . . .

96

. . . . . . . . . . . . . . . . . . . .

97

. . . . . . . . . . . . . . . . . . . . .

99

10.2.3 Le demi-additionneur
10.2.4 L'additionneur 1 bit

10.2.5 L'additionneur 4 bits . . . . . . . . . . . . . . . . . . . . . 100


10.3 Le soustracteur 4 bits

. . . . . . . . . . . . . . . . . . . . . . . . 101

10.4 L'additionneursoustracteur 4 bits

. . . . . . . . . . . . . . . . . 103

10.5 Le multiplexeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105


10.6 L'unit de calcul
10.7 Rsum
10.8 Exercices

. . . . . . . . . . . . . . . . . . . . . . . . . . . 106

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

11 Circuits squentiels
11.1 Les boucles d'inverseurs

112
. . . . . . . . . . . . . . . . . . . . . . . 112

11.2 La bascule RS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113


11.3 La bascule D

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

11.4 Construction d'un mot mmoire avec des bascules D


11.5 Lecture dans une mmoire de
11.6 Ecriture dans une mmoire de

41
41
5

. . . . . . . 115

bit . . . . . . . . . . . . . . . 116
bit

. . . . . . . . . . . . . . 118

11.7 Lire et crire dans une mmoire

xy

bits . . . . . . . . . . . . . 119

11.8 Catgories de mmoire . . . . . . . . . . . . . . . . . . . . . . . . 120


11.8.1 Mmoire RAM

. . . . . . . . . . . . . . . . . . . . . . . . 120

11.8.2 Mmoire statique . . . . . . . . . . . . . . . . . . . . . . . 120


11.8.3 Mmoire dynamique . . . . . . . . . . . . . . . . . . . . . 121
11.8.4 Mmoire ROM et variantes
11.9 Exercices

. . . . . . . . . . . . . . . . . 121

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

12 Automates

123

12.1 Les automates : un exemple simple . . . . . . . . . . . . . . . . . 123


12.1.1 Du graphe la ralisation . . . . . . . . . . . . . . . . . . 124
12.2 Ralisation d'un automate avec une entre . . . . . . . . . . . . . 126
12.3 Un automate gnral . . . . . . . . . . . . . . . . . . . . . . . . . 130
12.4 Exercices

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

13 L'ordinateur en papier
13.1 Anatomie

132

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

13.2 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133


13.3 Le langage d'assemblage . . . . . . . . . . . . . . . . . . . . . . . 134
13.4 Les modes d'addressage
13.5 Les microcodes
13.6 Le cycle

. . . . . . . . . . . . . . . . . . . . . . . 135

. . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

13.7 Exemple de programme : un boot-strap


13.8 Exercices

. . . . . . . . . . . . . . 138

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

14 Projet et valuation

143

Chapitre 1
Introduction

Ce support de cours est destin aux tudiants de la premire anne de licence. Son but est de permettre aux tudiants d'acqurir les notions de base
de l'architecture d'un ordinateur, pour lui permettre de matriser la faon dont
les programmes qu'il crit et leurs donnes sont traits par l'ordinateur pour
produire des rsultats.
La premire partie traite en assez grand dtail les codages usuels utiliss pour
reprsenter les donnes, en particulier les nombres et les caractres. Elle contient
galement la description de mthodes qu'on emploie sur ces reprsentations de
nombres pour eectuer les oprations arithmtiques usuelles.
La seconde partie montre comment on peut, aide de la logique et de transistors, raliser des circuits pour eectuer des calculs et mmoriser des valeurs ;
ensuite, en combinant organes de calcul et mmoires, nous montrons la ralisation d'automates.
Finalement, nous prsentons un ordinateur trs lmentaire mais complet et
nous montrons comment crire des programmes pour cette machine.
Dans cette introduction, nous prsentons un exemple de programme qui
eectue un calcul, puis nous fabriquons un ordinateur qui peut excuter ce programme. Le but est de montrer la manire dont les lments s'imbriquent entre
eux avant de rentrer dans les chapitres suivant dans les dtails de la reprsentation des donnes.

1.1

Dnitions

Exercice

1.1 : Trouvez par vous mme et crivez une dnition des mots

ordinateur, programme et information. (Il est important d'eectuer cet exercice


avant le suivant.)

Exercice
mots

1.2 : Chercher dans un dictionnaire et noter les dnitions des

ordinateur, programme et information.


7

1.2

Organisation gnrale d'un ordinateur

L'ordinateur est compos principalement de trois parties :


 la mmoire centrale o on stocke les donnes et les programmes
 l'unit centrale (UC, ou CPU comme

Central Processing Unit) o se font

les calculs
 les units d'entres sorties pour changer des informations avec l'extrieur.
Ces direntes parties sont relies entre elles par un canal de communication
qu'on appelle un

bus.

dans la plupart des bus, les composants ne peuvent pas

changer simultanment de l'information : un moment donn, il n'y a qu'un


seul change qui a lieu.
UC

memoire

E/S

bus

Figure 1.1  Structure d'un ordinateur : premire approche


Nous allons examiner chacun de ces composants.

1.2.1 La mmoire
La mmoire peut tre considre comme une srie d'endroits numrots que

mots, o on peut placer des valeurs. Le numro de chaque


adresse. Chaque mot mmoire peut contenir un nombre,
reprsenter n'importe quoi, condition de se mettre d'accord

nous appelons des

mot est appel son


qui peut servir

sur un code.

Par exemple, en utilisant avec le code ASCII, le nombre 65 sert

reprsenter le caractre
le nombre 32 le caractre

A,

le nombre 33 le caractre

espace.

point d'exclamation !,

Les chapitres 2, 4 et 5 et 6 s'tendent sur la

manire dont le contenu des mots peut servir reprsenter direntes choses
(des nombres positifs, ngatifs, fractionnels et des caractres).
Il est possible d'eectuer deux oprations sur un mot mmoire : y crire une
valeur et lire ce qu'on y a crit prcdemment.
La mmoire est utilise pour stocker les programmes excuts sur l'ordinateur. Ces programmes sont donc au pralable chargs en mmoire. Les donnes
manipules par le programme sont elles aussi stockes en mmoire. Par consquent chaque instruction du programme et chaque donne est code par un
nombre. Le stockage des programmes en mmoire au mme titre que les donnes est une caractristique essentielle de nos ordinateurs.

1.2.2 L'unit centrale


L'unit centrale est compose de deux parties principales : l'unit de calcul
et l'unit de commande (appele aussi unit de contrle).
L'unit de calcul permet d'eectuer des oprations simples, comme l'addition
de deux nombres. L'ensemble des oprations ralisables par l'unit de calcul est
dnie par le constructeur de l'unit centrale.
L'unit de contrle a pour rle de lire une instruction du programme en mmoire et de la faire raliser par l'unit de calcul en lui fournissant les oprandes
et l'opration raliser puis de passer l'instruction suivante du programme.

1.2.3 Les units d'entres sorties


Les units d'entres sorties sont les units d'changes d'informations entre
l'ordinateur et son environnement externe. On abrge souvent leur nom en
ou

IO (prononcer Ailleau) comme Input Ouput

E/S

Il existe de nombreux types d'units d'E/S. Certaines permettent seulement


l'ordinateur de lire des donnes, comme le clavier ou le CD-Rom. D'autres
ne permettent que d'crire des donnes, comme l'cran ou les imprimantes.
Certaines sont utilises la fois en lecture et en criture, comme l'adaptateur
rseau ou le disque dur.

UC

memoire

E/S

11
10
9

unite de calcul

8
7
6
5
4
3

unite de controle

2
1
0

lire/ecrire

bus
Figure 1.2  Structure d'un ordinateur : seconde approche

1.3

Excution d'un programme

1.3.1 Programme original


An de montrer comment fonctionne un ordinateur, nous allons montrer
comment il excute un programme. Le programme choisi calcule la racine carr

d'un nombre

selon l'algorithme dit

de Newton-Raphson.

dbut
r <- 1
rpter
r <- (r + n / r) / 2
fin
On commence avec une valeur approche de la racine, ici

1,

puis chaque tour

on amliore cette approximation en faisant la moyenne entre


de soi que si

inversement si

est plus petit que la racine exacte, alors

est trop grand, alors

n/r

n/r

et

n/r ;

il va

est plus grand et

est trop petit. (L'agorithme peut tre

utilis pour calculer les valeurs d'autres fonctions que la racine carre. La raison
pour laquelle l'algorithme converge eectivement vers la valeur exacte sort du
cadre de ce cours. ).
Considrons que

n = 4.

Voici comment volue la valeur de

mesure que

les calculs se droulent.

n = 4

r = 1,

(1.1)

r = 2.5,

(1.2)

r = 2.05,

(1.3)

r = 2.0006097560

(1.4)

r = 2.0000000929

(1.5)

...

(1.6)

Nous avons ici le squelette d'un programme ; il lui manque cependant au


moins une faon de lire la valeur de
prend

r,

et d'crire les valeurs successives que

qui sont du ressort des periphriques d'entre-sortie. Il serait sans

doute souhaitable que le programme s'arrte au bout d'un certain temps, par
exemple aprs avoir rpt un certain nombre de fois les calculs, ou bien quand
la valeur de

r est susamment proche de la valeur exacte de la racine recherche.


n r2 se rapproche de 0 et plus

(On peut valuer facilement cette erreur ; plus


l'erreur est petite.)

1.3.2 Programme traduit pour l'ordinateur


Ce programme est crit dans un langage dit

de haut niveau,

destin tre

compris par le programmeur ; il faut le traduire en instructions que l'ordinateur sait excuter. (Le travail de traduction d'un programme en instructions

10

lmentaires pour l'ordinateur est en gnral eectu lui-mme par un autre


programme appel

interprteur ou compilateur.)

L'ordinateur ne possde pas d'instructions complexes, comme calculer (r +


n/r)/2 ; il ne peut eectuer que des oprations lmentaires avec deux oprandes.
Si on traduit le programme en telles instructions, on pourrait avoir :

(1)
(2)
(3)
(4)
(5)
(6)

placer 1 dans r
diviser n par r
ajouter r et le resultat du calcul prcdent
diviser le rsultat du calcul prcdent par 2
placer le rsultat dans r
recommencer avec l'instruction 2

Comme il est dicile de dsigner des choses comme

prcdent ,

 le rsultat du calcul

nous prenons des mots de la mmoire, que nous pourrons dsi-

gner par leurs adresses, pour contenir les rsultats des calculs intermdiaires.
Soient t1, t2 et t3 trois mots mmoires. Le programme exprim en instructions
lmentaires devient alors :

(a)
(b)
(c)
(d)
(e)
(f)

placer 1 dans r
diviser n par r, placer le rsultat dans t1
additionner r et t1, placer le rsultat dans t2
placer 2 dans t3
diviser t2 par t3, placer le rsultat dans r
recommencer avec l'instruction b

1.3.3 Instruction de base


Si on fait la liste des instructions lmentaires que nous utilisons, on voit
qu'il n'y en a que quatre :
1.
2.

3.

4.

placer une valeur dans un mot, utilis par les instructions a et d.


diviser le contenu d'un mot par celui d'un autre mot, placer le rsultat
dans un troisime mot, utilis par les instructions b et e.
additionner le contenu de deux mots, placer le rsultat dans un troisime
mot, utilis par l'instruction c.
recommencer avec telle instruction, utilis par l'instruction f .

Nous avons donc l une liste d'instructions lmentaires que notre ordinateur
doit savoir excuter pour eectuer les calculs de notre programme.

1.3.4 Codage des instructions


Les instructions sont stockes dans la mmoire, comme les donnes et la
mmoire ne contient que des nombres. faut donc choisir un
les instructions avec des nombres,

11

code pour reprsenter

Dans les ordinateurs communs, ces codes sont choisis avec un grand soin pour
utiliser le moins de mmoire possible mais comme nous cherchons d'abord ici
avoir un ordinateur simple, nous allons choisir un code lmentaire : chaque
instruction sera code sur quatre mots mmoire conscutifs ; le premier mot
indique quelle opration doit tre eectue ; les trois mots suivants contiennent
la description des valeurs sur lesquelles l'opration doit tre eectue (on appelle
cela les

oprandes).

Dtaillons le codage de l'instruction additionner le contenu du mot mmoire 2805 et du mot mmoire 9591 et placer le rsultat dans le mot mmoire
2904 : pour le codage de l'opration, on peut choisir n'importe quelle valeur, par
exemple 4. L'instruction apparaitra dans la mmoire comme une suite de quatre
mots qui contiendront les valeurs 4, 2805, 9591, 2904.
Codons l'instruction diviser le contenu d'un mot par celui d'un autre mot,
placer le rsultat dans un troisime mot de la mme manire mais avec un code
opration dirent, par exmple 2. Ainsi les quatre mots 2, 2805, 9591, 2904

diviser le contenu du mot d'adresse 2805 par celui du mot


d'adresse 9591 et placer le rsultat dans le mot d'adresse 2904.
Pour l'instruction placer une valeur dans un mot, nous choisissons de nouveau un code opration (arbitraire), par exemple 1. Le deuxime mot contiendra
codent l'instruction :

la valeur, dans le troisime mot il y aura l'adresse du mot o la placer, le quatrime mot pourra contenir n'importe quoi. Par exemple, la suite de mots 1, 2,
3, 4 placera la valeur 2 dans le mot d'adresse 3.
La dernire instruction dont nous avons besoin est

instruction.

recommencer avec telle

Codons l'opration avec la valeur 3 et plaons dans le mot suivant

l'adresse de l'instruction avec laquelle recommencer. Les deux mots qui suivent
pourront contenir n'importe quelle valeur sans modier le sens de l'instruction.
La table suivante rsume notre codage des oprations. Les points d'interrogation servent marquer les mots dont la valeur peut changer sans que la
signication de l'instruction soit modie. Insistons encore une fois sur le fait
que ce codage des oprations et de leurs oprandes est
opration

code

3me

4me

mot

mot

mot

adr1

adr1

adr2

adr3

adr1

adr2

adr3

adr1

opration
crire le nombre
crire

adr3
adr3

dans le mot

adr1

la somme

des contenus de
crire

arbitraire.

2me

adr1

et

adr2

le rsultat de la division

des contenus de

adr1

et

adr2

continuer avec l'instruction


qui se trouve

Exercice

adr1

1.3 : Si le mot mmoire d'adresse 4 contient la valeur 251, quel

sera l'eet de l'instruction code par 4, 4, 4, 4 ?

Exercice 1.4 : Quel sera l'eet de l'instruction code par 2, 4, 4, 4 ?


Exercice 1.5 : Quel sera l'eet de l'instruction 1, 2, 4, 8 ?
12

1.3.5 Traduction du programme


Maintenant que nous avons choisi un codage pour les instructions lmentaires, nous pouvons encoder notre programme avec des valeurs placer dans
la mmoire. Le tableau suivant suppose que le programme est plac partir du
mot d'adresse (arbitraire) 2997. La premire colonne contient l'adresse de chaque
mot, la deuxime indique ce qu'il contient et la troisime est un commentaire
pour faciliter la lecture.
adresse

contenu

2997 :

2998 :

2999 :

1000

3000 :

3001 :

3002 :

3003 :

1020

3004 :

signication
; ;Placer
; ;le nombre 1
; ; l'adresse 1000
; ; Placer
; ;le nombre 2
; ; l'adresse 1020

3005 :

3006 :

1020

; ;le contenu de l'adresse 1020

; ; Diviser

3007 :

1000

; ;par le contenu de l'adresse 1000

3008 :

1010

; ;et placer le rsultat l'adresse 1010 (n/r)

3009 :

3010 :

1020

; ;le contenu de l'adresse 1020

3011 :

1010

; ;au contenu de l'adresse 1010

3012 :

1010

; ;et placer le rsultat l'adresse 1010 (r+n/r)

3013 :

3014 :

1010

; ;le contenu de l'adresse 1010

3015 :

1020

; ;par le nombre 2

3016 :

1000

; ;et placer le rsultat l'adresse 1000 r=(r+n/r)/2

3017 :

3018 :

3005

3019 :

3020 :

; ; Ajouter

; ;Diviser

; ;continuer avec une autre instruction :


; ;la prochaine instruction est l'adresse 3005

1.3.6 L'unit de controle, le PC


L'unit de contrle possde un registre (mmoire d'un mot), qui contient
l'adresse de la prochaine instruction excuter. (Ce mot mmoire n'est plac
dans l'unit de contrle que parce que cela permet d'y accder trs vite ; on
peut parfaitement imaginer d'avoir un mot dans la mmoire ordinaire, une
adresse xe, qui joue le rle de PC..) Ce registre est nomm PC pour

Counter

Program

(compteur ordinal en franais). L'unit de contrle eectue en boucle

un programme cabl (un

automate), dont les instructions sont les suivantes :

1. charger le contenu du mot dont l'adresse est dans PC,


2. ajouter 1 au contenu de PC.

13

3. dcoder l'instruction, charger les oprandes si ncessaire, faire eectuer


l'opration par l'unit de calcul et stocker le rsultat l'adresse spcie
dans l'instruction,
Le dcodage de l'instruction et le chargement des oprandes, le stockage des
instructions est une suite d'oprations encore plus lmentaires (on parle de
micro-instructions). Elle est ralise avec un automate. Pour les trois premiers
codes oprations, il pourrait s'agir d'eectuer les choses suivantes :
1. Si le code de l'opration vaut

2.

lire le mot dont l'adresse est dans PC,

3.

et ajouter 1 PC

4.

lire le mot dont l'adresse est dans PC,

5.

et ajouter 2 PC

6.

placer la valeur lue en

2 au mot dont on a lu l'adresse en 4.

7. Si le code de l'opration vaut

8.

lire le mot dont l'adresse est dans PC

9.

et ajouter

PC

10.

lire le mot dont l'adresse est dans PC

11.

et ajouter

12.

placer les valeurs lues en 8 et 10 dans le diviseur

13.

lire le mot dont l'adresse est dans PC

14.

et ajouter

15.

placer la sortie du diviseur dans l'adresse lue en

PC

PC

16. Si le code de l'opration vaut

13.

17.

lire le mot dont l'adresse est dans PC

18.

.
.
et placer sa valeur dans PC .

Pour commencer l'excution de notre programme, il sut maintenant de


placer 2997 (l'adresse de la premire instruction) dans le registre PC.
Notez que l'instruction  continuer avec telle instruction  (qu'on appelle
aussi un

branchement inconditionnel) consiste simplement modier le contenu

du PC ; de cette manire, l'adresse de l'instruction suivante sera modie.

Exercice

1.6 : La mmoire contient les valeurs suivantes l'adresse 2000.

Que codent ces valeurs si ce sont des instructions ? Quel sera leur eet ?
adresse

contenu

2000 :

2001 :

2000

2002 :

2001

2003 :

2002

signication

14

1.4

La brique de base : le transistor

Pour construire notre ordinateur, nous disposons uniquement de transistors.


Un transistor est un interrupteur lectronique qui commute trs rapidement. Le
transistor prsente trois connexions externes : la source, le drain et la grille. Il
fonctionne comme un interrupteur entre la source et le drain, control par la
grille.

Figure 1.3  La structure d'un des types de transistor


Pour un niveau de tension sur la grille, le transistor est assimilable un
interrupteur ouvert : La tension mesure sur le drain est celle de la source.
Pour un autre niveau de tension sur la grille, le transistor se comporte comme
un interrupteur ferm et la tension mesure en sortie est celle de la source.
La gure 1.3 montre la structure d'un transistor : le substrat sur lequel est
ralis le transistor est colori en violet ; la source et le drain sont coloris en

15

vert. Suivant la tension prsente sur la grille, qui porte l'tiquette

Metal, le pont

en oxyde de silicium, colori en bleu se comporte soit comme un isolant, soit


comme un conducteur.
Le transistor est la brique de base pour construire nos ordinateurs ; nous
allons voir dans la suite de ce cours comment ils sont utiliss pour raliser
l'unit de calcul, la mmoire, l'automate de l'unit de contrle.

1.5

Rsum

Notre ordinateur est compos de trois parties : mmoire, processeur, entressorties. Le processeur possde un jeu d'instructions. Une instruction est crite
sous la forme d'une suite de nombres. Tout programme doit tre crit en utilisant
le jeu d'instructions du processeur pour pouvoir tre excut par ce dernier. Le
programme lors de son excution est stock en mmoire et le processeur excute
les instructions les unes aprs les autres.

1.6

Exercices

Exercice 1.7 : Que signient les instructions suivantes si c'est un programme


pour un ordinateur ayant le jeu d'instruction choisi dans ce chapitre ? Quelles
seront les valeurs successives que contiendra le mot mmoire 3000 quand le programme suivant sera excut (attention, la valeur changera au cours de l'excution du programme) ?

16

1997 :

1998 :

1999 :

2999

2000 :

3000

2001 :

2002 :

2003 :

3000

2004 :

2004

2005 :

2006 :

2007 :

3001

2008 :

3001

2009 :

2010 :

3000

2011 :

3001

2012 :

3002

2013 :

2014 :

3001

2015 :

2999

2016 :

3000

2017 :

2018 :

3002

2019 :

2999

2020 :

3001

2021 :

2022 :

2009

17

Chapitre 2
La reprsentation des
nombres entiers positifs

Le chapitre expose la manire de reprsenter les nombres entiers positifs et


de passer d'une reprsentation une autre. Il commence par un expos concis,
destin celui qui se sent l'aise avec les mathmatiques, puis reprend la matire
avec des dtails pour les autres.

2.1

Pour les matheux


a qu'on reprsente en base b avec n chires an1 a0 a pour
i
a
0i<n i b . Pour obtenir sa reprsentation en base 10, il sut de d-

Un nombre
valeur

velopper la formule et d'eectuer les calculs. Pour passer de la reprsentation

b : on P
obtient le chire de droite avec une
P
a = r + nb, puisque 0i<n ai bi = a0 + b 1i<n ai bi1
gal au reste r de la division ; on recommence l'opration

dcimale la reprsentation en base


division euclidienne ; si
le chire de droite est
sur

2.2

pour obtenir les autres chires.

Pour les programmeurs

Un nombre est reprsent dans l'ordinateur d'une manire que nous n'avons
en gnral pas besoin de connatre (le plus souvent en binaire).
Pour lire un nombre en base

base

reprsent par une suite de chires, on

peut utiliser le pseudo-code suivant :

lirnum(base){
res = 0;
pour chaque chiffre (de gauche droite)

18

res = res * base + val(chiffre)


return res
val permet d'obtenir la valeur du nombre reprsent par un chire.
crire un nombre n en base base, on peut utiliser le pseudo-code

La fonction
Pour

ecrinum(n, base){
si (n >= base)
ecrinum(n / base)
// division entire
ecrire(code(n % base)) // reste de la division
}
La fonction

code donne le chire qui reprsente un nombre. Noter l'appel rcursif

qui permet d'crire les chires les plus signicatifs en premier.

2.3

Pour les autres

Le reste du chapitre reprend pas pas ces descriptions concises de la mthode


de reprsentation des nombres, destination de ceux qui ne sont pas l'aise
avec le formalisme des mathmatiques ou la programmation.

2.3.1 Qu'est-ce qu'un nombre ?


On croit souvent qu'un nombre, c'est une srie de chires.
suite de chires est

une des faons

Ceci est faux. Une

de reprsenter un nombre mais il en existe

d'autres. Par exemple, le nombre que nous reprsentons habituellement avec 12


peut aussi se reprsenter avec xii (en chires romains) ; il y a des nombres qu'on

1
3 (il faut une
virgule et un nombre inni de chires 3 pour le reprsenter comme une suite
ne peut pas reprsenter avec une suite (nie) de chires, comme

de chires). D'autres exemples de nombres communs qui ne se reprsentent pas


bien avec des suites de chires sont
multiplie par lui-mme) ou

(le nombre qui donne 2 quand on le

sont des reprsentations du nombre usuellement not avec

9+3

144
12 ou des indications

On peut discuter pour dcider si

ou

d'oprations.
Il est important pour nous informaticiens de comprendre que nous ne manipulons pas des nombres mais des

reprsentations de nombres. C'est essentiel,

particulirement dans ce chapitre, o nous allons tudier comment passer de


la reprsentation usuelle d'un nombre d'autres reprsentations de ce mme
nombre : il ne faut pas s'imaginer que le nombre

est sa reprsentation usuelle.

L'essentiel est donc de garder l'esprit qu'un nombre est quelque chose de
plus vaste que la manire de le reprsenter et qu'il existe plusieurs reprsentations pour un mme nombre. On trouvera des considrations plus approfondies
sur la nature des nombres dans le numro spcial de la revue

19

La Recherche

d'aot 1999. En rsum, on peut dire que personne ne sait trs bien ce qu'est
un nombre (surtout pas les mathmaticiens).

2.3.2 La notation usuelle : numration en base dcimale


Nous sommes habitus reprsenter nos nombres en base dix. Par exemple,
nous reprsentons le nombre d'habitants de la France avec

60 000 000 (environ).

en base dcimale
en base 10 ou simplement en dcimal), parce qu'ils impliquent une

On dit que ces squences de chires reprsentent le nombre


(on dit aussi

srie de multiplications et d'additions avec le nombre 10. Ainsi 365 reprsente


le nombre qu'on obtient avec la squence d'oprations

3 100 + 6 10 + 5.

Cette manire de reprsenter les nombres nous est tellement familire qu'il
faut faire un petit eort de pense pour raliser que nous en connaissons d'autres.

2.3.3 D'autres reprsentations usuelles


Une autre faon usuelle de reprsenter les nombres consiste les reprsenter

en

chires romains.

Ici la squence de chires n'implique que des additions et

des soustractions lmentaires, pas de multiplication. On utilise couramment :


chire romain

quivalent en base 10

10

50

100

500

1000

Les valeurs reprsentes par les chires sont additionner quand il n'y en a
pas de plus grandes droite, soustraire sinon. Ainsi IV reprsente le chire 4
dans la reprsentation dcimale (on retire le 1 reprsent par I au 5 reprsent
par V, alors que VI reprsente 6 (5

+ 1).

Les direntes reprsentations des nombres prsentent des avantages et des


inconvnients divers. Ainsi, la reprsentation en chires romains permet de faire
des additions sans avoir besoin de se souvenir des tables d'additions ; en revanche, la mthode de multiplication que nous avons apprise l'cole primaire
ne fonctionne pas.
Il y a d'autres reprsentations usuelles des nombres : par exemple on utilise
la base 1 pour reprsenter (avec des bougies) un nombre d'annes sur un gateau
d'anniversaire. On utilise aussi la base 1 quand on compte sur ses doigts de la
faon usuelle : le nombre de doigts levs (en Europe) reprsente un nombre.

20

2.3.4 Nommer les chires d'un nombre


J'ai besoin de donner un

nom aux chires d'un nombre pour dcrire les cal-

culs eectuer. Pour cela, je numrote les chires d'un nombre en commenant
par la droite avec 0. Pour un nombre
nommer ses chires

qui se reprsente avec

chires, je vais

an1 a1 a0 .

Par exemple pour le nombre

27483,

j'ai

a4 = 2, a3 = 7, a2 = 4, a1 = 8

et

a0 = 3.

2.3.5 La valeur d'un nombre dcimal


Pour un nombre dcimal (la reprsentation usuelle), on nous a appris
l'cole primaire dcomposer le nombre en units, dizaines, centaines, milliers
etc. Par exemple le nombre

3141

se compose de trois milliers, une centaine,

quatre dizaines et une unit.


On obtient ces blocs dans lesquels on dcompose les nombres en multipliant
la taille du bloc prcdent par 10. Il s'agit des puissances successives de 10. (Y

100 = 1 ; si vous avez besoin d'en tre convaincu, notez


= 10 /10, par exemple 103 = 104 /10 ; donc 100 = 101 /10 =

compris pour les units :

10
10/10 = 1.

qu'on a

n1

C'est pareil pour les autres nombres : peu prs n'importe quoi

la puissance 0 vaut 1.)


Donc la dcomposition du nombre

4 10 + 1 10

3141 peut aussi s'crire 3 103 + 1 102 +

On peut faire la mme dcomposition pour n'importe quel nombre de

chires

= an1 an2 a1 a0

= an1 10n1 + an2 10n2 + + a1 101 + a0 100

Les points de suspension permettent d'crire la formule d'une faon gnrale,


quel que soit le nombre de chires. On peut aussi utiliser une criture plus
compacte avec l'oprateur

qui indique qu'il faut additionner des expressions.

Avec cet oprateur, on peut rcrire la formule comme

a = an1 a0 =

ai bi

0i<n
C'est pour pouvoir crire cette formule que j'ai choisi de numroter les chires
partir de 0.
Pour simplier les calculs,on peut les regrouper :

an1 10n1 + an2 10n2 + + a1 101 + a0 100

( ((an1 10 + an2 ) 10 + ) 10 + a1 ) 10 + a0

21

qu'on peut aussi crire en changeant les parties gauche et droite de chaque
addition

a = a0 + 10(a1 + 10( + 10(an2 + 10an1 ) ))


Ceci s'appelle la

forme de Horner. Son principal avantage pour nous, c'est qu'il

n'y a plus que des multiplications par 10 et des additions, au lieu de multiplications par 10, 100, 1000 etc.

2.3.6 Reprsentation des nombres en base constante


Au lieu du 10 de la notation dcimale, on peut utiliser ( peu prs) n'importe
quel nombre.
Presque tous les ordinateurs utilisent la base 2 (le

binaire),

parce qu'il est

bien adapt aux circuits lectroniques avec lesquels on construit les ordinateurs.
Pour viter de manipuler les nombreux chires utiliss dans la reprsentation

octal

binaire, nous utilisons aussi frquemment les bases 8 et 16 (on parle alors d'
et d'

hexadcimal),

pour lequelles les conversions avec la reprsentation binaire

sont particulirement faciles.


Pour le binaire (la base 2), on n'a besoin que des chires 0 et 1 pour reprsenter tous les nombres. Pour l'octal (la base 8), les chires de 0 7 susent.
Pour l'hexadcimal, on a besoin de chires pour noter toutes les valeurs de 0
15 ; pour les chires manquant, on utilise les lettres de l'alphabet :

b = 11, c = 12, d = 13, e = 14

et

a = 10,

f = 15.

A partir de maintenant, je vais m'eorcer d'crire (dans ce chapitre au moins)


tous les nombres sous la forme
en base
ou

b.

16d16

xb

pour indiquer que le nombre

est reprsent

Par exemple le nombre de jours d'une anne (non bisextile) est

ou

5558

ou

36510

1011011012 .

Les considrations de la section prcdente sur les nombres reprsents en notation dcimale fonctionnent aussi pour tous les nombres dans n'importe quelle
base

, simplement en remplaant les 10 par

reprsent avec

chires en base

b.

On a donc, pour un nombre

an1 a1 a0

(2.1)

an1 bn1 + + a1 b1 + a0 b0

(2.2)

a0 + b(a1 + b( + b(an2 + ban1 ) ))


X
ai bi

(2.3)

a =

(2.4)

0i<n
Les lignes 2.1 et 2.2 sont importantes, parce qu'elles servent de point d'appui
pour trouver les calculs eectuer lors des conversions.
Pour appliquer les formules gnrales sur le nombre (en dcimal habituel)

31415910 , on sait que b = 10 et on donne un nom aux chires en les numrotant


de la droite vers la gauche :

22

a5

a4

a3

a2

a1

a0

Il n'y a plus qu'a remplacer les valeurs dans la partie droite, en remplissant les
points de suspension

(a5 a4 a3 a2 a1 a0 )b

a5 b5 + a4 b4 + a3 b3 + a2 b2 + a1 b1 + a0 b0

= a0 + b(a1 + b(a2 + b(a3 + b(a4 + ba5 ))))


31415910

3 105 + 1 104 + 4 103 + 1 102 + 5 101 + 9 100

9 + 10(5 + 10(1 + 10(4 + 10(1 + 10 3))))

La suite du chapitre montre comment eectuer les conversions usuelles entre


les nombres.

2.3.7 Conversions vers la base 10


A partir de n'importe quel nombre, on peut facilement calculer sa reprsentation en dcimal en utilisant nos formules. Il sut de prendre l'quation 2.1 ou
2.2 et d'eectuer les calculs.

45678 en dcimal en utilisant 2.1,


b = 8, a3 = 4, a2 = 5, a1 = 6 et a0 = 7. On

Par exemple, pour reprsenter


mence par noter que

on comprend la

formule

a = an1 a1 a0 = an1 bn1 + + a1 b1 + a0 b0


et on obtient

45678 = 4 83 + 5 82 + 6 81 + 7 80
On commence eectuer les calculs :

45678 = 4 51210 + 5 6410 + 6 8 + 7


puis on les termine :

45678 = 204810 + 32010 + 4810 + 7 = 242310


Il est souvent plus facile de faire les calculs en utilisant la ligne 2.2 :

a = an1 a1 a0 = a0 + b(a1 + b( + b(an2 + ban1 ) ))


Dans notre exemple, on obtient (en montrant tous les calculs intermdiaires) :

45678

7 + 8 (6 + 8 (5 + 8 4))

7 + 8 (6 + 8 (5 + 3210 ))

7 + 8 (6 + 8 3710 )

7 + 8 (6 + 29610 )

7 + 8 30210 )

7 + 241610 )

242310
23

Depuis la base 16, le processus est le mme mais il faut en plus convertir
les chires vers la base 10. Un exemple pour reprsenter

f ac16

en base 10, avec

2.2 :

F AC16

= C16 + 1610 (A16 + 1610 F16 )


=

1210 + 1610 (1010 + 1610 1510 )

1210 + 1610 (1010 + 24010 )

1210 + 1610 25010

1210 + 400010

401210

Le passage de la premire la deuxime ligne a correspondu au passage des


chires hexadcimaux plus grands que 9 leur reprsentation en base 10.
Le mme calcul en utilisant 2.1

F AC16

F16 (1610 )2 + A16 (1610 )1 + C16 (1610 )0

1510 (1610 )2 + 1010 (1610 )1 + 1216 (1610 )0

1510 25610 + 1010 1610 + 1210

384010 + 16010 + 1210

401210

Pour un exemple avec une base non standard, partons de

(31415)6

vers le

dcimal :

(31415)6

(3141)6 6 + 5

((314)6 6 + 1) 6 + 5

((314)6 6 + 1) 6 + 5

(((31)6 6 + 4) 6 + 1) 6 + 5

(((3 6 + 1) 6 + 4) 6 + 1) 6 + 5

(((19)10 6 + 4) 6 + 1) 6 + 5

((118)10 6 + 1) 6 + 5

(709)10 6 + 5

(4259)10

Ici, j'ai montr la construction de la forme de Horner sur les premires lignes.
Tous les calculs peuvent se faire de tte.
Pour un exemple avec une base tonnante, reprsentons
(rien ne nous oblige utiliser une base positive) :

(172)8

2 8 (7 8 1))
24

(172)8

en dcimal

2 8 (7 8))

2 8 (1))

2+8

10

Le dernier exemple, pour reprsenter

(11011011)2

(11011011)2

en dcimal :

1 + 2(1 + 2(0 + 2(1 + 2(1 + 2(0 + 2(1 + 2 1))))))

1 + 2(1 + 2(0 + 2(1 + 2(1 + 2(0 + 2 3)))))

1 + 2(1 + 2(0 + 2(1 + 2(1 + 2(0 + 6)))))

1 + 2(1 + 2(0 + 2(1 + 2(1 + 2 6))))

1 + 2(1 + 2(0 + 2(1 + 2(1 + 12))))

1 + 2(1 + 2(0 + 2(1 + 2 13)))

1 + 2(1 + 2(0 + 2(1 + 26)))

1 + 2(1 + 2(0 + 2 27))

1 + 2(1 + 2(0 + 54))

1 + 2(1 + 2 54)

1 + 2(1 + 108)

1 + 2 109

1 + 218

219

Ici, il y a tellement d'additions et de multiplications eectuer qu'il est dlicat


de ne pas se tromper dans les calculs, mme s'ils sont faciles. Nous verrons un peu
plus loin une autre mthode plus facile, en passant par l'octal ou l'hexadcimal.
L'algorithme de conversion peut s'crire comme dans la gure 2.1. En partant
de la reprsentation de Horner, il revient eectuer successivement chaque
multiplication et chaque addition en partant de l'intrieur de l'expression. Pour
tre certain de l'avoir bien compris, il peut tre intressant de le traduire en
programme.

valeur <- an1


pour i allant de n 2 0 faire
valeur <- valeurb + ai
Figure 2.1  Algorithme de conversion de la base

vers la base 10

2.3.8 Conversion depuis la base dix


Pour convertir un nombre de la base dix vers une base quelconque, l'ide est
de faire une division avec un rsultat et un reste (on dit une division

25

euclidienne)

2009
16
40
40

8
251

251 8
24 31

31 8
24 3
7

11
8
3

09
8
1

Figure 2.2  Les divisions eectues pour transformer

200910

en

37318 .

pour extraire le chire le plus droite, puis de recommencer avec le rsultat tant
qu'il est plus grand que la base. Cela fait sortir une expression de la forme de
la partie droite de l'galit 2.2.
Sur un exemple : pour reprsenter 68110 en octal, on le divise par 8 : 68110 =
1+88510 . On divise maintenant 8510 par 8 : 8510 = 5+81010 . On recommence
encore une fois avec 1010 = 2 + 8 1. Quand on met tout ensemble :

68110

1 + 8 8510

= 1 + 8 (5 + 8 1010 )
= 1 + 8 (5 + 8 (2 + 8 1))
On a maintenant quelque chose qui est dans le mme format que la partie droite
de 2.2, avec

b = 8. Donc dans la reprsentation en octal de 68110 ,


a1 vaut 5, le chire a2 vaut 2 et le chire a3

vaut 1, le chire

le chire

a0

vaut 1. En

consquence

68110 = 12518
Un autre exemple avec

(2009)10

(2009)10

1 + 8 251

1 + 8 (3 + 8 31)

1 + 8 (3 + 8 (7 + 8 3))

37318

On peut voir la srie de divisions sur la gure 2.2 telle qu'on peut les poser sur
sa feuille de brouillon.
Avec une base non standard :

(2003)10

(2003)10

en base 6 ?

5 + 6 33310

5 + 6 (3 + 6 5510 )

5 + 6 (3 + 6 (1 + 6 9))

5 + 6 (3 + 6 (1 + 6 (3 + 6 1)))
26

2003 6
18
333
20
18
23
18
5

333 6
30 55
33
30
3

55 6
54 9
1

Figure 2.3  Conversion de

9 6
6 1
3

(2003)10

vers

1 6
0 0
1

0 6
0 0
0

(13135)6

(((1 6 + 3) 6 + 1) 6 + 3) 6 + 5

131356

Les divisions que nous avons eectues sont reprsentes sur la gure 2.3. Les
deux dernires divisions de la gure sont inutiles mais elles montrent que
est gal

13135 (on dit que les zros gauche ne sont

pas

013135

signicatifs). (L'avant

dernire ligne permet de remettre les chires dans l'ordre dans lequel ils apparaissent dans le nombre.)
Du dcimal vers la base 16, la procdure est la mme mais il faut une tape
supplmentaire pour eectuer la conversion des chires suprieurs 9 (dans cet
exemple,

(13)10 = (d)16 )

(2009)10

Avec une base ngative :

200310

9 + 1610 12510

9 + 1610 (1310 + 1610 7)

9 + 1610 (d + 1610 7)

(7 (16)10 + d) (16)10 + 9

7d916

200310

en base

8 ?

3 8 (250)

3 8 (6 8 32)

3 8 (6 8 (0 8 (4)))

= 3 8 (6 8 (0 8 (4 8 1)))
= 3 8 (6 8 (0 8 (4 8 1)))
=

140638

Ici j'ai du rchir en faisant les divisions pour obtenir des restes positifs. Par

250 = 31 (8) 2 parce que


250 = 32 8 + 6, pour lequel le reste

exemple la deuxime ligne, je n'ai pas utilis


le reste de la division est ngatif mais
est positif.

Le nombre d'oprations pour convertir des nombres entre les bases 10 et 2


est tel que c'est une trs mauvaise ide de faire le travail directement. Il est bien

27

i <- 0

a b faire
ci <- a modulo b
a <- a / b

tant que

i <- i+1
n tant que

ci

<-

Figure 2.4  Un algorithme de conversion de la base 10 vers la base

plus pratique de convertir en base 8 ou en base 16, puis d'utiliser la mthode


de conversion rapide entre ces bases et la base 2 que nous prsentons dans la
prochaine section.
L'algorithme de conversion d'un nombre
chires vers un nombre

dans une base

de la base 10 reprsent sur

peut ainsi s'crire comme dans la

gure 2.4. Il donne les chires du rsultat de droite gauche.

2.4

Conversions entre binaire, octal et hexadcimal

Pour convertir entre les bases 2, 8 et 16, il existe une mthode particulire
rapide et facile. Je la prsente d'une faon concise puis avec quelques dtails.

2.4.1 Pour les matheux


Etant donn deux bases

b0

et

b,

reprsentation d'un nombre entre les


Pour convertir de la base
nombre en base

vers la base

de manire que

(an1 a0 )b

b0 = bp
0
bases b et b

si on a

b0 ,

nmodp = 0)

avec

entier le passage de la

est rapide et facile.

on ajoute des 0 gauche du

puis on utilise l'quivalence

ai bi

0i<n

(bi

0i<n/p

api+j b0j )

0j<p

api+j bj est un chire de la base b0 not ci .


P
i
l'galit (an1 a0 )b =
0i<n/p ci b qui permet d'obtenir
0
sentation du nombre en base b .
Chaque

0j<p

Ceci est trs utilis avec

b=2

et

b0 = 8

28

ou avec

b=2

et

On obtient ainsi
avec

ci ,

b0 = 1610

la repr-

2.4.2 Pour les autres


Le principe de la mthode est d'exploiter le fait que chaque chire en octal
est quivalent trois chires binaires et chaque chire en hexadcimal quatre
chires binaires.
Pour passer de l'octal au binaire, on remplace chaque chire octal par trois
chires binaires, en utilisant la table ( connatre par cur)
octal

binaire

000

001

010

011

100

101

110

111

Pour convertir du binaire vers l'octal, on regroupe les chires binaires par
groupes de trois et on remplace chaque groupe par le chire octal quivalent.
Pour la base 16, on procde de la mme manire mais avec des groupes de quatre
chires.
Ainsi, pour convertir

76548

en hexadcimal :

 on commence par fabriquer le binaire en remplaant chaque chire octal


par les trois chires binaires quivalents :

111 110 101 1002

 on regroupe les chires binaires par paquets de quatre en partant de la


droite :

1111 1010 11002

 on remplace chaque groupe de quatre chires par son quivalent hexadcimal :

f ac16
c0f f ee16

Pour convertir

c0f f ee16

en octal, on utilise la procdure inverse :

1100 0000 1111 1111 1110 11102

110 000 001 111 111 111 101 1102

601777568

L'opration est facile et peu sujette aux erreurs de calcul. Quand on part du
dcimal pour obtenir du binaire, c'est bien plus facile de passer par l'octal que
d'eectuer sans erreur la longue srie de divisions par deux de la mthode de
conversion gnrale.

2.4.3 Rcapitulation des conversions entre les bases 10, 2,


8 et 16
Pour s'entraner aux conversions usuelles, on peut partir d'un nombre crit
en base 10, le convertir en base 8, puis en base 2, puis en base 16, puis

29

nouveau en base 10. (Cet exercice prsente l'avantage d'tre auto-correcteur : si


on commet une erreur, on le verra aisment puisqu'on ne retombera pas sur le
nombre de dpart ; cela permet de chercher l'erreur et de la corriger.) Ainsi, en
partant de

(1999)10 ,

on calculera successivement :

(249)10 8 + 7

((31)10 8 + 1) 8 + 7

((3 8 + 7) 8 + 1) 8 + 7

(3717)8

(011 111 001 111)2

(0111 1100 1111)2

(0111 1100 1111)2

(7CF )16

(7CF )16

(7 (16)10 + (c)16 ) (16)10 + (f )16

(7 (16)10 + (12)10 ) (16)10 + (15)10

(1999)10

(1999)10

(3717)8

On peut faire cet exercice en partant de n'importe laquelle des bases 2, 8,


10 et 16. Ainsi, en partant de la base 16 :

(caf e)16

(1100 1010 1111 1110)2

(1100101011111110)2

(1 100 101 011 111 110)2

(145376)8

((((1 8 + 4) 8 + 5) 8 + 3) 8 + 7) 8 + 6

(((12)10 8 + 5) 8 + 3) 8 + 7) 8 + 6

(((101)10 8 + 3) 8 + 7) 8 + 6

((811)10 8 + 7) 8 + 6

(6489)10 8 + 6

(51966)10

(((12)10 (16)10 + (10)10 ) (16)10 + (15)10 ) (16)10 + (14)10

((c (16)10 + a) (16)10 + f ) (16)10 + e

(caf e)16

(145376)8

(51966)10

Pour eectuer facilement les oprations de conversion entre les bases 2, 8,


10 et 16, il est utile de connatre par cur la reprsentation des nombres entre
0 et

1510

dans ces bases, prsente dans la table 2.1

Il est aussi utile de connatre les premires puissances de 2 :

30

dcimal

octal

hexadcimal

binaire

10

11

100

101

110

111

10

1000

11

1001

10

12

1010

11

13

1011

12

14

1100

13

15

1101

14

16

1110

15

17

1111

16

20

10

10000

Table 2.1  La reprsentation des nombres entre 0 et

1610

dans les bases 10, 8,

16 et 2. Il est utile de connaitre cette table par coeur.

20
21
22
23
24
25
26
27
28
29
210

2.5

1
2
4
8
16
32
64
128
256
512
1024

Rsum

Pour convertir d'une base quelconque vers la base 10, crire la formule dveloppe puis eectuer les oprations.
Pour convertir de la base 10 vers une base quelconque, eectuer la srie de
divisions par la base : les restes des divisions donnent les chires du nombre de
la droite vers la gauche.
Entre le binaire et l'octal ou l'hexadcimal, utiliser la mthode rapide.

31

2.6

Exercice

Exercice 2.1 : Convertir 31 et 96 en chires romains et eectuer l'addition


dans cette reprsentation. Convertir le rsultat dans la base 10 usuelle et vrier
qu'il est gal 127.

Exercice 2.2 : Dcrire dans le dtail, avec des phrases, la suite d'oprations
qu'il faut eectuer pour additionner deux nombres crits en chires romains
(faute d'avoir tous les lments pour crire un programme).

Exercice 2.3 : (dicile pour le moment) Raliser un programme qui imprime


un nombre en chires romains. A dfaut de programme, dcrire avec des phrases
les oprations eectuer.

Exercice 2.4 : crire les nombres 534210 et 400910 sous leur forme de Horner.

Exercice 2.5 : Convertir 4528 de la base 8 vers la base 10.


Exercice 2.6 : Convertir f af16 en dcimal et en binaire en

indiquant les

tapes intermdiaires.

Exercice 2.7 : Convertir 02348 en hexadcimal.


Exercice 2.8 : Convertir 592610 en octal, hexadcimal et binaire en indiquant
les tapes intermdiaires.

Exercice 2.9 : Convertir le nombre (1254)7 de la base 7 vers le dcimal.


Exercice 2.10 : Convertir le nombre (1254)8 de la base 8 vers la base
10.

Exercice 2.11 : Convertir le nombre (1254)6 de la base -6 vers la base 10.


Exercice 2.12 : Convertir le nombre 339110 en base -5. (Rappel : les restes
5 doivent tre positifs ; on ne doit pas
18 = 3 5 3 mais plutt 18 = 4 5 + 2).

des divisions par


comme

utiliser des choses

Exercice 2.13 : (long et rptitif ) Reprenez le programme crit au chapitre


prcdent et crivez les codes des oprations en binaire.

2.7

Supplment : le binaire facile

Une faon facile et amusante de compter en binaire consiste compter sur


ses doigts mais d'une manire inhabituelle. Chaque doigt joue le rle d'un chire
binaire, qui vaut 0 s'il est repli et 1 s'il est tendu.
Pour commencer, on peut crire sur le bout de ses doigts la valeur du nombre
en base 10 qu'il reprsente : 1 sur le pouce de la main gauche, 2 sur l'index, 4
sur le majeur, 8 sur l'annulaire et 16 sur l'auriculaire. Sur la main droite, on
place 32 sur l'auriculaire, 64 sur l'annulaire, 128 sur le majeur, 256 sur l'index
et 512 sur le pouce. Avec un peu d'exercice, on se souvient facilement de ces
valeurs et il n'est plus ncessaire de se barbouiller les doigts.
Un exercice facile consiste numrer les nombres : tous les doigts replis

32

(=

00000 000002 )

vaut 0. Le pouce gauche lev seul (=

00000 000012 ) vaut 1,


00000 000102 ) vaut 2, ce qui est facile voir puisque c'est
pouce et l'index (= 00000 000112 ) vaut 3, puisqu'on additione

l'index gauche seul (=


crit dessus. Le

le 1 marqu sur le pouce et le 2 inscrit sur l'index. Avec le majeur gauche
seul (=

00000 00100),

on a 4, puis 5 en levant aussi le pouce, 6 en levant l'index

et 7 si on les lve tous les deux. Avec cette mthode, on peut compter jusqu'
1023 sur ces dix doigts.
Une autre forme d'exercice consiste choisir un nombre et chercher les
doigts lever pour le reprsenter. Prenons le nombre

2710

par exemple : si on

lve n'importe quel doigt de la main droite, on obtient une valeur trop grande :
la main droite est donc compltement ferme. Si on lve l'auriculaire gauche, on
a la valeur 16 et il reste 11 reprsenter. En levant aussi l'annulaire, on ajoute
8 et il reste 3 reprsenter. On ne lve donc pas le majeur puisqu'il vaut 4 mais
on lve l'index et le pouce qui valent 2 et 1 : il ne reste plus rien compter. Donc
le nombre

2710

se reprsente sur les doigts avec la main droite compltement

ferme et sur la main gauche, seul le majeur repli : cela se note

11011

si on

utilise des chires.

2.8

Supplment : la commande gnome-calculator

Quand on utilise le systme Linux avec la gestion de fentre installe, il y a un


programme

gnome-calculator qui permet d'explorer d'une manire interactive

la reprsentation des nombres dans des bases direntes de 10.


On lance le programme en passant par les menus (si on utilise Gnome) ou
bien entrant dans un terminal la commande

gnome-calculator (si on utilise un

autre systme de fentrage, par exemple Kde). Cela fait apparatre une fentre
qui ressemble une calculette, qu'on peut utiliser pour eectuer les calculs
usuels.

View pour faire sortir un


Programming : cela modie l'achage des nombres et les fonctions

Dans la barre du haut de la fentre, cliquer sur


menu ; choisir
disponibles.

Dans ce mode, la reprsentation des nombres en binaire est toujours disponible pour les nombres entiers positifs ; leurs valeurs sont toujours aches sous
la forme de 64 bits ; on peut modier ces valeurs en cliquant dessus.
On peut faire des conversions entre binaire, octal, dcimal et hexadcimal
en slectionnant

Bin, Oct, Dec

ou

Hex.

De nombreuses autres oprations sont possibles.

33

Chapitre 3
Oprations en binaire

Nous montrons ici comment on peut eectuer des oprations directement


en binaire. Ceci nous sera ncessaire dans la suite, quand nous aborderons la
reprsentation des nombres signs.
Chaque chire d'un nombre crit en base 2 est appel bit. (Le mot bit vient

binary digit. Le terme consacr en franais est celui de e.b., comme dans
lments binaires mais il est peu employ.) Le bit de droite d'un nombre est
appel bit de poids faible, celui de gauche le bit de poids fort.
de

3.1

Addition en base 2

Quelle que soit la base dans laquelle on reprsente des nombres, on peut
continuer poser les oprations comme nous l'avons appris l'cole primaire.
Cel est vrai aussi en base deux. Cependant, il faut changer les tables d'addition
et de multiplication.

ai

bi

ci

10

Table 3.1  Table d'addition pour la base 2.

La table d'addition de la base 2 est prsente dans la table 3.1. Comme on


n'a que deux chires, elle ne comporte que quatre entres ! De plus, les trois
premires lignes sont identiques celles de la base dix. La seule petite dicult
provient de la dernire ligne : puisqu'on compte en base deux, le rsultat de

1+1

est gal

102 ,

qui est la manire de reprsenter la valeur

34

210

en binaire.

Avec cette table d'addition, on peut oprer une addition avec les rgles
usuelles que nous employons pour la base 10. Par exemple, additionnons
et

3810

2010 .
On commence par les convertir en base 2, en passant par la base 8.

3810 = 4 8 + 6 = 468 = 100 110


2010 = 2 8 + 4 = 248 = 010 100
On additionne ensuite, colonne par colonne. La retenue, quand elle existe, est
toujours gale 1 : nous la notons dans l'opration avec un

r
1

Finalement, il ne reste plus qu' convertir le rsultat en base dix pour vrier
qu'on n'a pas fait d'erreur de calcul :

111 0102 = 728 = 7 8 + 2 = 5810 .

Sur certaines colonnes, on peut avoir additionner 1 et 1 et une retenue en


plus. Il est donc pratique d'ajouter dans la table d'addition une ligne pour tenir
compte de ce cas o il faut additionner trois fois 1 ; c'est ce que nous faisons
dans la table 3.2.

ri

ai

bi

ci

10

11

Table 3.2  Table d'addition pour la base 2 complte.

Ceci nous permet d'eectuer des additions plus diciles, par exemple

11910 = 1258 + 1678


r

=1

On obtient bien :

3.2

8510 +

:
1

11 001 100 = 3148 = 20410 .

La multiplication en base 2

Nous commenons par examiner une mthode qui permet, en base 10, d'effectuer des multiplications sans avoir besoin des tables de multiplication. Nous
montrons ensuite comment elle conduit directement une mthode simple et
facile pour eectuer les multiplications en base 2.

35

3.2.1 La multiplication en base 10 sans table


Supposons que nous souhaitions calculer

27 43

mais que nous ne nous

connaissons pas les tables de multiplication. Une mthode consiste partir d'une
ligne qui contient 1 et 43, puis d'additionner le contenu de chaque ligne luimme, jusqu' obtenir sur la colonne de gauche quelque chose de plus grand que
le second multiplicande :
1

43

86

172

344

16

688

32
On s'arrte l puisque 32 est plus grand que 27. On remonte ensuite en
marquant les valeurs additionner dans la colonne de gauche pour obtenir 27 ;

27 = 16 + quelque chose, puis 27 = 16 + 8 + quelque chose


16 + 8 + 4 est trop grand, puis 27 = 16 + 8 + 2 + quelque chose et nalement
27 = 16 + 8 + 2 + 1.

on commence avec
mais

Dans le tableau de dpart, on ne conserve que les lignes qui nous servent
obtenir 27 (sur le papier, on barre les autres) ; on fait la somme de la colonne
de droite et on obtient le rsultat recherch :
1
43
2

86

344

16

688
1161

L'explication est simple : on s'est content dans cette procdure d'utiliser la


suite d'galits :

27 43

= (1 + 2 + 8 + 16) 43
= 1 43 + 2 43 + 8 43 + 16 43
= 43 + 86 + 344 + 688
= 1 161

L'intrt de la chose, c'est qu'on a eectu tout le travail seulement avec des
additions.
Il est noter pour la suite que le choix des lignes additionner est d'une
certaine faon une conversion vers la base 2 : on a

2710

=
=
=

(1 + 2 + 8 + 1610 )
(((1 2 + 1) + 0) 2 + 1) 2 + 1
110112

3.2.2 Le dcalage gauche et droite


Quand on rajoute un zro droite d'un nombre, on le multiplie par sa base.
Cette opration est familire en base 10 : ajouter un 0 droite d'un nombre
reprsent en base 10 revient le multiplier par 10.

36

On appelle cette opration un

dcalage gauche. Ceci


P est vrai dans n'importe

quelle base constante. Puisque le nombre

b (an a0 )

= b 0in ai b
P
= 0in ai bi+1
= an a0 0

an a0 =

0in

ai bi ,

on a

Ce dcalage gauche permet en binaire d'eectuer facilement des multiplications par 2.


Inversement et pour la mme raison un dcalage droite consiste supprimer
le chire de droite d'un nombre ; on peut ajouter un 0 gauche, dans les chires
de poids forts, si on souhaite conserver le mme nombre de chires. Le rsultat
de cette opration est une division par la base.

3.2.3 Un algorithme de multiplication en binaire


On peut appliquer en base 2 la mme mthode que celle qu'on a employe en
base 10 mais les choses sont plus faciles puisqu'on a dja dcompos le nombre
de gauche en base 2 et que les multiplications par deux sont en fait simplement
des dcalages. Pour multiplier deux nombres

r <- 0
tant que a est diffrent de 0
si le bit de droite de a vaut 1
r r + b
dcaler a droite
dcaler b gauche

a et b, l'algorithme est simplement

On peut faire tourner ce programme la main, en crivant les valeurs successives des variables ; par exemple, si on reprend les valeurs prcdentes et qu'on
multiplie entre eux 27 et 43 :
a

11011

101011

commentaire

dpart

101011

r + b

01101

1010110

dcaler a et b

00110

10101100

dcaler a et b

00011

101011000

dcaler a et b

00001

1010110000

00000

1010110000

10000001

r + b

on n'ajoute pas b r
111011001

r + b

dcaler a et b
10010001001

r + b

dcaler a et b

On justiera cet algorithme dans le paragraphe suivant.

37

ai
0
0
1
1

bi

ci

Table 3.3  Table de multiplication pour la base 2

3.2.4 Poser la multiplication en base 2


La table de multiplication en base 2 est particulirement facile retenir. Elle
est prsente dans la table 3.3. Puisqu'on est en binaire, elle ne contient que les
multiplications par 0 et par 1 !
On peut poser les multiplications en base 2 comme on le fait en base 10,
condition d'utiliser cette table. Par exemple, toujours avec notre exemple :

101011
x 11011
---------101011
101011.
000000..
101011...
101011....
---------10010001001
Il est amusant de constater que cette mthode eectue les mmes oprations
que l'algorithme de la section prcdente mais dans un ordre dirent : pour
chaque ligne du rsultat intermdiaire, l'ajout du point correspond au dcalage
gauche, et ici nous faisons toutes les additions la n au lieu de les eectuer
pour chaque rsultat intermdiaire.

3.3

Rsum

Les tables d'addition et de multiplication en binaire sont faciles retenir.


On peut les utiliser pour poser des additions en binaire comme on le fait en base
10.

3.4

Exercices

Exercice 3.1 : (exercice type) Convertir 18310

et

7310

en binaire, les addi-

tionner dans cette reprsentation. Convertir le rsultat en dcimal pour vrier

38

qu'on n'a pas fait d'erreur.

Exercice

3.2 : Multiplier

52810

et

32110

avec

l'algorithme de multiplication sans table.

Exercice

3.3 : (comparer avec le prcdent) Convertir

52810

et

32110

en

binaire et faire tourner la main l'algorithme de multiplication.

Exercice 3.4 : (comparer avec les deux prcdents) Convertir 52810 et 32110
en binaire, poser et eectuer la multiplication en binaire.

Exercice 3.5 : tablir les tables d'addition et de multiplication en base 5,


refaire l'exercice 1 en base 5 au lieu de la base 2.

Exercice 3.6 : La base 2 n'utilise que les chires 0 et 1. (facile) Traduire


en dcimal les seize valeurs entre
table d'addition de la base

00002

et

11112 .

(plus dicile) Quelle est la

Supplment
Dans le programme de gnome prsent au chapitre prcdent, on peut eectuer des dcalages avec les boutons tiquets

39

<

( gauche) et

>

( droite).

Chapitre 4
Reprsentation des nombres
signs

Dans la partie prcdente, nous avons examin comment passer de la reprsentation d'un nombre d'une base dans une autre. Nous nous sommes particulirement intresss la reprsentation utilise dans les ordinateurs, la base 2.
Ici, nous allons examiner comment reprsenter les nombres ngatifs dans cette
base.
Dans la plupart des cas, nous allons devoir spcier quel est le nombre de bits
utilis pour reprsenter un nombre. Nous commenons par prsenter brivement
des systmes de reprsentation des nombres avec un signe que nous n'utiliserons
que plus loin, puis nous entrerons dans le dtail de la notation

2 qui est la plus employe pour les nombres entiers.

4.1

en complment

Le bit de signe, la notation en excdent

Nous savons que toute information est code dans un ordinateur avec un
1 ou un 0. Aucun autre symbole ne peut tre utilis. Jusqu'alors nous avons
reprsent les nombres en supposant qu'ils taient positifs. Pour les nombres
avec un signe, deux systmes possibles sont la dnition d'un bit de signe et la
notation en excdent, qui sont toutes les deux employes pour la reprsentation
des nombres en virgule ottante, que nous verrons plus loin.
Attention, la reprsentation la plus courante pour les nombres entiers utilise
une autre mthode, le complment deux, qui est prsente dans la section
suivante.

40

4.1.1 Le bit de signe


Le principe est d'utiliser un bit pour reprsenter le signe du nombre. Par
exemple, dans un nombre sur 8 bits
sur les bits

b6 b0

et le bit

b7

b7 b0 ,

on a la valeur absolue du nombre

vaut 0 pour un nombre positif et 1 pour un bit

ngatif.
Ainsi sur 8 bits, on reprsentera

+53

avec

0011 0101

et

53 avec 1011 0101.


011 0101, la valeur

Dans les deux cas, les sept bits de poids faibles codent, avec

absolue 53 et le bit de signe vaut 0 pour le nombre positif et 1 pour le nombre


ngatif.
L'utilisation du bit de signe prsente des inconvnients : d'une part, il y a
deux reprsentations distinctes pour une mme valeur ; sur huit bits,
et

1000 0000

0000 0000

valent tous les deux 0. D'autre part, l'addition et la soustraction

sont un peu compliques : pour additionner deux nombres, il faut additionner


les deux valeurs absolues si les bits de signe sont identiques. S'ils sont dirents
il faut soustraire la plus petite valeur absolue de la plus grande. La comparaison
de deux nombres est aussi un peu complique, puisqu'il faut l aussi traiter le
bit de signe comme un cas particulier.

4.1.2 La reprsentation en excdent


Le principe de la reprsentation en excdent

E + n en stockant la valeur n. Ainsi,


fait E . Sur 8 bits en excdent 127 on

est de reprsenter le nombre

quand on stocke un 0, on reprsente en


aura les valeurs suivantes :

valeur binaire

valeur dcimale

valeur reprsente

0000 0000
0000 0001
0111 1101
0111 1110
0111 1111
1000 0000
1000 0001
1111 1111

127 + 0 = 127
127 + 1 = 126
127 + 125 = 2
127 + 126 = 1
127 + 127 = 0
127 + 128 = 1
127 + 129 = 2
127 + 255 = 128

1
125
126
127
128
129
255

Nous pouvons remarquer qu'en choisissant correctement l'excdent, le bit de


poids fort permet de connatre immdiatement le signe du nombre.
L'addition des nombres en excdent est elle aussi plus complique que celle
de deux nombres positifs ordinaires (voir exercice).
Le bit de signe et la reprsentation en excdent sont utilises pour les nombres
reprsents avec une virgule ottante, que nous examinerons au prochain chaptre.

41

4.2

Reprsentation des nombres signs en complment 2

La reprsentation la plus courante pour les entiers dans l'ordinateur est la


reprsentation dite en

complment 2, qui prsente deux avantages : d'une part

on peut additionner des nombres en complment deux avec les rgles usuelles
de l'addition, sans se soucier de leur signe : le rsultat de l'addition aura le bon
signe ; d'autre part, chaque nombre qu'on peut reprsenter ne possde qu'une
reprsentation unique.
Il y a deux manires de considrer les nombres en complment 2 : on
peut comprendre sur quelles bases arithmtiques ils sont construits et on peut
maitriser les techniques qui permettent de calculer l'oppos d'un nombre.

Attention, les oprations en complment deux imposent d'eectuer les calculs sur un nombre de bits bien dni.

4.2.1 Les bases du complment deux


L'ide de la notation en complment deux est d'utiliser le bit de poids
fort pour indiquer la partie ngative du nombre reprsent. Dans un nombre
reprsent par les bits
jusqu'

a0

an1 an2 a0 ,

tous les bits de poids faibles, de

an2

comptent pour la partie positive : ils se traduisent comme d'usage par

i
n1>i0 ai 2 ) ;
le bit de poids le plus fort, an1 , indique la partie ngative ; il participe la
n1
valeur du nombre pour an1 2
.

la somme des puissances de 2 qui correspondent leurs indices (

Le bit de poids le plus fort (le bit

an1 )

joue le rle d'un bit de signe. Il va

de soi qu'un nombre dans lequel il est gal 0 n'a pas de partie ngative : c'est
donc un nombre positif ou nul. Quand ce bit est gal 1, la partie ngative
vaut

2n1

et sera toujours plus grande que la partie positive qui vaut au plus

i
n1
1
0i<n1 2 = 2

si tous les bits sont 1. On n'a donc pas besoin de

calculer la valeur d'un nombre pour savoir s'il est positif ou ngatif : le bit de
gauche joue le rle d'un bit de signe.

Quel est le plus grand nombre positif reprsentable sur

bits ?

Ce

sera un nombre dont la partie ngative sera nulle et dont la partie positive sera
la plus grande possible. Il aura donc un bit 0 gauche et tous les autres bits
1 ; par exemple sur 8 bits, ce sera

0111 1111.

Sa valeur sera

2n1 1,

Quel est le plus petit nombre ngatif reprsentable sur

ici

127.

bits ?

Ce

sera un nombre avec une partie ngative dirente de 0 et une partie positive

n 1 bits
2n1 , ici 128.

nulle. On le reprsentera avec un bit 1 gauche suivi de


exemple, sur 8 bits, ce sera

1000 0000.

Sa valeur sera

0 ; par

Notez qu'on peut reprsenter un nombre ngatif de plus que de nombres


strictement positifs (c'est dire suprieurs 0) ; c'est un (lger) inconvnient

42

de la reprsentation en complment 2.

Comment reprsenter 0 ?

Bien sur, avec seulement des bits 0. Notez

qu'en complment 2, le bit de signe de 0 est gal 0, comme pour un nombre


strictement positif.

Comment reprsenter
cimal

sur

partie positive devra donc valoir


puissances de 2 de
nombre

bits ?

On va reprsenter le nombre d-

avec une partie ngative dirente de 0 (et donc gale

n 2;

n1

1,

2n1 ;

la

qui est gal la somme de toutes les

on l'obtient avec rien que des bits 1. Donc, le

se reprsente avec un mot dont tous les bits sont 1.

On peut partir des proprits de la reprsentation pour convertir entre la reprsentation en complment 2 et la reprsentation usuelle en dcimal avec signe
mais ce n'est pas pratique du tout. La section suivante contient une mthode
bien plus aise. Voici nammoins deux exemples d'une manire de procder.

Reprsenter -84 en complment 2 sur 8 bits.

Le nombre est ngatif,

(27 ) = 128. Il faut


128 84 = 44 pour obtenir 84 ; 4410 = 5 8 + 4 se reprsente en
avec 101 100. Le rsultat est donc 1010 1100

il faudra donc un bit de poids fort 1 qui codera pour


lui ajouter
base 2

Calculer la valeur en dcimal du nombre reprsent en complment


2 avec 1100 0011. Le nombre se compose d'une partie ngative qui vaut
12810

1 000 0112 = 1038 = 6710 .


12810 + 6710 = 6110 .

et d'une partie positive

avec signe est donc

Sa valeur en dcimal

Encore une fois, les mthode de conversion de la section suivante sont plus
faciles mettre en oeuvre.

4.2.2 Calculer l'oppos d'un nombre en complment 2


Il est facile de calculer l'oppos d'un nombre en complment 2 en eectuant
deux oprations successives : on bascule tous les bits et on ajoute 1.
Le basculement de tous les bits consiste remplacer chaque bit 0 de la
chane de bits d'origine par un bit 1 dans le rsultat et chaque bit 1 de
la chane de bits d'origine par un bit 0. Cela s'appelle le
d'un nombre. Nous le noterons

C1 (a).

complment 1

(On peut utiliser le complment 1 pour

reprsenter les nombres ngatifs mais nous n'en parlerons pas ici.)
Ajouter 1 au complment 1 de la reprsentation d'un nombre permet d'obtenir son

complment 2. Nous le noterons C2 (a).

Pour convertir un nombre ngatif du dcimal vers le complment 2


On calcule la reprsentation binaire de sa valeur absolue (le nombre sans le

43

signe), puis on calcule le complment 2 de ce nombre.


Avec un exemple sur 8 bits : comment reprsenter

8410

en complment

2 ? On calcule sa reprsentation en binaire en passant par l'octal

8410 = (1 8 + 2) 8 + 4 = 1248 = 1 010 1002


01 010 100. (Attention ne pas
oublier d'ajouter autant de bits 0 gauche que ncessaire pour avoir une
reprsentation sur 8 bits.) On calcule son complment 1 :

Le nombre se reprsente donc sur 8 bits avec

C1 (01 010 100) = 10 101 011


Finalement on ajoute 1 pour obtenir son complment 2

C2 (01 010 100) = C1 (01 010 100) + 1 = 10 101 011 + 1 = 10 101 100
Cette squence d'oprations se pose aisment dans la table suivante :

8410 =

1228 =

8410 =

01 010 100
10 101 011
+1
10 101 100

Complment 1
Complment 2

Pour convertir un nombre ngatif du complment 2 vers le dcimal


On calcule son complment 2 (on obtient sa valeur absolue), on la convertit
en dcimal et on rajoute un signe

devant le nombre obtenu.

Avec un exemple sur 8 bits : quelle est la reprsentation en dcimal d'un


nombre

reprsent en complment 2 par

11 000 011 ?

On calcule le compl-

ment 2.

a
C1 (a)
C2 (a)

11 000 011
00 111 100
+ 1
00 111 101

On convertit le rsultat :

111 101 = 758 = 6110

On ajoute le signe et on obtient le rsultat

6110 .

Calcul rapide du complment 2 (facultatif)


Avec un peu d'exprience, on se passe de poser l'opration pour calculer le
complment 2. Remarquons une proprit de l'addition de 1 un nombre
binaire : tous les bits de poids faibles qui valent 1 passent 0 et le bit 0 de
poids le plus faible passe 1 ; le reste est inchang. On peut combiner cette
observation avec le calcul du complment 1, en parcourant les bits de droite
gauche. Tant qu'on a des bits 0, on ne les modie pas ; on laisse le premier
bit 1 intact puis on inverse tous les bits suivants.

44

i 0

Premire partie : copier jusqu'au premier 1


tant que ai 6= 1 faire
bi ai
i i+1
fin tant que
bi ai
i i+1

Deuxime partie : inverser jusqu' la n


tant que i n faire
bi 1ai
i i+1
fin tant que

4.2.3 L'arithmtique en complment 2


Comme mentionn au dbut de la section, le principal attrait de la notation
en complment 2 est que les additions peuvent se faire sans s'inquiter du
signe des oprandes.

Addition
8410 =
2310 = 278 =

Voyons l'addition sur un exemple. On a vu plus haut que sur 8 bits

10 101 100 et que 6110 = 11 000 011.


10 1112 84
10 101 100
84
+
10 111
+23
= 11 000 011 = 61

Essayons donc d'ajouter

La valeur obtenue correspond bien ce qu'on attendait.


Il faut prendre garde ne conserver du rsultat que le nombre de bits utiliss
pour la reprsentation. L'addition peut produire un bit 1 supplmentaire qu'il
est important d'ignorer. Pour un exemple, additionnons les reprsentations en
complment 2 de

61 et de 23.
23 :

Pour cela, il faut commencer par calculer la

reprsentation 2 de

C2 (00 010 111) = C1 (00 010 111) + 1 = 11 101 000 + 1 = 11 101 001
On peut maintenant poser l'addition :

+
=

11 000 011
11 101 001
10 101 100

-61
-23
= -84

On ignore le neuvime bit du rsultat de l'addition et le rsultat obtenu est


bien gal

84

45

Dbordement de capacit
Quand on additionne deux nombres de mme signe, on peut rencontrer un
dbordement de capacit : le rsultat est trop grand (s'il est positif ) ou trop petit
(s'il est ngatif ) pour tre reprsent avec le nombre de bits dont on dispose.
Les dbordements de capacit sur les additions sont faciles dtecter, puisqu'il s'agit toujours d'ajouter deux nombres de mme signe et d'avoir un rsultat d'un signe dirent. Pourtant, la plupart des environnements actuels ne les
traitent pas. Ceci conduit des situations qui semblent ridicules aux mathmaticiens. Par exemple, si on ajoute 1 au plus grand nombre positif, on obtient le
plus petit nombre ngatif.
Le programme C suivant numre tous les entiers qu'on peut reprsenter :
il dmarrre une boucle avec une variable 1 et lui ajoute 1 jusqu' arriver
0 ! Contrairement ce qu'on pourrait penser, ce programme ne boucle pas
indniment.

int
main(){
int t = 1;
while(t != 0)
t = t + 1;
}

return 0;

4.2.4 La multiplication
La multiplication de nombres en complment 2 peut se faire directement
avec un algorithme dit de

Booth, que nous n'examinerons pas ici. Si on a besoin

de multiplier des nombres signs entre eux, le plus simple la main est de calculer
le signe qu'aura le rsultat (ngatif si les signes sont dirents, positif s'ils sont
identiques), de multiplier leurs valeurs absolues et de prendre le complment
2 du rsultat s'il doit tre ngatif.

4.3

Rsum

La faon la plus usuelle de reprsenter les nombres ngatifs est la reprsentation en complment deux. Pour trouver la reprsentation en complment
deux d'un nombre, on part de sa reprsentation en binaire, on change la valeur
de chaque bit et on ajoute 1. On peut additionner entre eux ces nombres de la
faon usuelle mais pas les multiplier.

46

4.4

Exercice

Exercice 4.1 : (simple) A partir de deux nombres reprsents en excdent


E,

comment obtenir avec le moins d'oprations possible la reprsentation de

leur somme en excdent

E?

Exercice 4.2 : Avec quatre bits, on peut reprsenter 16 valeurs direntes ;


enumrer ces 16 valeurs et indiquer pour chacune d'entre elle le nombre qu'elle
code en complment 2.

Exercice 4.3 : (simple) Un mot de 8 bits contient 10100101. Que reprsentet-il si c'est un nombre positif sur huit bits ? si c'est un nombre avec un bit de
signe ? en excdent 127 ? En complment 2 (sur 8 bits) ?

Exercice 4.4 : (simple) Calculer le complment deux de 0101 1010.


Exercice 4.5 : (simple) Reprsenter 39 en complment deux sur 8 bits.
Exercice 4.6 : (exercice type) Convertir 72 et 29 en binaire (en passant par
l'octal) sur 8 bits. Calculer leurs complments 2 pour obtenir la reprsentation

72 et 29, puis calculer, avec les rgles d'addition usuelle de la base 2 :


72 + 29, 72 29, 72 + 29, 72 29. Convertir les rsultats en dcimal et vrier
de

que vous n'avez pas fait d'erreur de calcul.

Exercice

4.7 : (amusant) Quel est l'quivalent, pour les nombres en base

10, du complment 2 ?

Exercice 4.8 : ( faire) tant donn deux nombres reprsents en complment 2, comment peut-on savoir lequel est le plus grand en n'utilisant que
des comparaisons de bits entre eux ? crire un programme pour eectuer cette
comparaison. (Pour esquiver les questions de reprsentation des nombres dans
le langage de programmation utilis, on pourra reprsenter le nombre comme
une liste de chires (en Lisp) ou une chane de caractres (en C) ou un tableau
(en Python) ; si votre maitrise d'un langage de programmation est insusante,
dcrivez l'algorithme avec des phrases.)

Exercice

4.9 : ( faire) Identier les deux valeurs pour lesquelles le com-

plment deux ne change pas le bit de signe de la reprsentation d'un nombre.


(Facultatif ) Prouver qu'il le change pour tous les autres.

Exercice 4.10 : (dicile) Prouver que le complment deux du complment


deux d'un nombre est gal ce nombre.

Supplment
Le programme

gnome-calculator prsent dans les supplments du chapitre


1's et 2's.

2 calcule les complments 1 et 2 des nombres, avec les boutons

Le nombre de bits sur lequel le calcul sera eectu peut tre x 16, 32 ou 64
bits.

47

Chapitre 5
Calculer des ordres de
grandeur entre base 2 et base
10

En informatique, on est souvent amen manipuler simultanment de trs


grandes et de trs petites valeurs. Par exemple, estimer la dure, en heure ou
en jours, que prendra un calcul en comptant le nombre d'instructions, sachant
qu'une instruction utilisera environ

109

seconde.

Quand on s'intresse aux ordres de grandeur, on peut faire des calculs approchs en se fondant sur le fait que

210 = 1024

est trs proche de

103 = 1000.

Ainsi, pour rpondre la question suivante : combien de bits faut-il pour


reprsenter une valeur entire de l'ordre de

1018 ,

le plus simple est de calculer

la puissance de 2 laquelle correspond cette valeur, il sura d'ajouter 1 pour


obtenir la rponse recherche. Une squence de transformations simples nous dit
que :

1018

= (103 )6
= 10006
10246
(210 )6
260

Il faudra donc environ 61 bits pour reprsenter cette valeur.


Dans l'autre sens, quel est, en base 10, l'ordre de grandeur du plus grand
nombre qu'on peut reprsenter sur 32 bits ?
Le plus grand nombre qu'on peut reprsenter sur 32 bits est
approximer

32

en puissance de 10 :

48

232 1.

Pour

232

= 22 230
= 4 (210 )3
= 4 10243
4 10003
4 (103 )3
4 109

La rponse est donc : de l'ordre de 4 milliards.


Pour les puissances de 2, on utilise des prxes suivants :
1 octet

8 bits
1024 octets

1 Kilo octet(Ko)

1 Mega octet(Mo)

1024 Ko

1 Giga octet(Go)

1024 Mo

1 Tera octet(To)

1024 Go

1 Peta octet(Po)

1024 To

5.1

23 bits
213 bits
223 bits
233 bits
243 bits
253 bits

Exercices

Exercice 5.1 : Estimer combien de caractres contient un livre de 250 pages


(y compris les espaces). En utilisant un octet par caractre, combien d'octets
sont ncessaires pour encoder un tel livre ?

Exercice 5.2 : Au moment de la rdaction de ce support, sur le site de la


BNF (Bibliothque Nationale de France), la rubrique BNF en chires, on peut
lire :  Plus de treize millions de livres et d'imprims, deux cent cinquante mille
volumes de manuscrits, trois cent cinquante mille collections de priodiques,
environ douze millions d'estampes, photographies et aches, plus de huit cent
mille cartes et plans, deux millions de pices musicales, un million de documents
sonores, plusieurs dizaines de milliers de vidos et de documents multimdias,
cinq cent trente mille monnaies et mdailles..., telle est l'valuation actuelle des
fonds de la Bibliothque.
Supposons que ces 13 000 000 de livres et d'imprims fassent en moyenne 250
pages. En utilisant le code ASCII tendu, combien d'octets sont ncessaires pour
encoder ces documents ?

Exercice

5.3 : A chaque fois qu'on remonte d'une gnration, le nombre

d'anctres est multipli par 2 : on a 2 parents, 4 grand-parents, 8 arrires grandparents etc. En supposant une gnration tous les 25 ans, il y a

40

gnrations

qui nous sparent de nos anctres de l'an 1000. Approximer en base 10 le nombre
d'anctres que nous avons en l'an 1000.

Exercice

5.4 : (Hors sujet) Comparer la rponse la question prcdente

avec le nombre d'tres humains vivant en l'an 1000. Trouver une explication.

Exercice 5.5 : Une lgende dit qu'en guise de rcompense, l'inventeur (indien) du jeu d'chec demande un grain de bl sur la premire case de l'chiquier,
deux grains sur la seconde, quatre sur la troisime et ainsi de suite jusqu' la
soixante quatrime. Approximer en base 10 le nombre de grains poser sur la
dernire case. En supposant qu'il faut dix grains de bls pour faire un gramme,

49

approximer le poids que cela reprsente. Convertir le rsultat en tonne.

Exercice 5.6 : On estime le nombre de parties possibles au checs quelque


chose comme

10123 .

Combien faut-il de bits pour reprsenter ce nombre ?

Exercice

5.7 : Quel est l'ordre de grandeur du plus grand nombre qu'on

peut reprsenter en utilisant 2 Kilo octets de mmoire (16384 bits).

Exercice 5.8 : Mme question pour un giga octets au lieu d'un kilo octets.
Exercice 5.9 : (instructif ) : Considrons le programme de 4.2.3, (a) valuer
l'ordre de grandeur du nombre de tours de boucles qu'il eectue. Considrons

comparer avec 0, ajouter 1,

que chaque tour de boucle fait trois oprations (

recommencer la boucle)

et que chaque opration prend un tic d'horloge (la fr-

quence du processeur indique le nombre de tics d'horloge par seconde) ; (b)


valuer l'ordre de grandeur du temps ncessaire pour excuter le programme.

foo.c, le compiler avec


gcc foo.c, mesurer son temps d'excution avec la ligne
de commande time a.out ; comparer le temps mesur avec l'estimation de (b).

(c) Placer le code du programme dans un chier nomm


la ligne de commande

50

Chapitre 6
Reprsenter les nombres qui
ne sont pas entiers

Dans les chapitres prcdents, nous avons examin comment reprsenter les
nombres entiers, positifs ou ngatifs. Nous examinons ici comment reprsenter
les nombres avec des chires droite de la virgule.

6.1

Reprsentation des nombres fractionnels

Comment reprsenter un nombre comme

(0.3)10

en base 2 ? Ce qui ne fonc-

tionne absolument pas, c'est de convertir les chires droite de la virgule en


base 2 (ici

(0.11)2 .

310 = (11)2 ) et de placer le rsulat droite de la virgule, pour obtenir


(0.11)2 = (0.75)10 .

En ralit, on a

Dans la numration en base 10, les chires droite de la virgule indiquent


des fractions de la base : le premier chire droite de la virgule indique le
nombre de diximes, le second le nombre de centimes, le troisime le nombre
de millimes, etc. Autrement dit, le

ime chire droite de


1/10i . Comme 1/10n

le nombre de fois o le nombre contient

10n ,

la virgule indique
peut aussi s'crire

il sut d'indexer les chires droite de la virgule dans la reprsentation

d'un nombre avec des index ngatifs partir de

1.

On a alors pour une partie

franctionnelle quelconque

(0.a1 a2 am )10 =

ai 10i

mi<0
Ceci est vrai dans une base

quelconque. On aura donc

(0.a1 a2 am )b =

X
mi<0

51

ai bi

On peut combiner cette relation pour exprimer la fois la partie entire et


la partie fractionnelle, en numrotant les chires gauche de la virgule partir
de 0 en montant et ceux droite de la virgule partir de
a alors

an1 a0 .a1 am =

1 en descendant. On

ai bi

mi<n
Pour la reprsentation en base 2, le premier chire droite de la virgule vaut

1/2 = (0.5)10 ,

le second

1/4 = (0.25)10 ,

le troisime

1/8 = (0.125)10

et ainsi de

suite.

6.1.1 Conversion de la partie fractionnelle d'un nombre


de la base 10 vers la base 2
Pour convertir la partie fractionnelle d'un nombre dcimal en binaire, il
existe une procdure simple : on multiplie la partie fractionnelle du nombre par
2 et on utilise le chire gauche de la virgule comme prochain chire de la
reprsentation en base 2. Par exemple, pour reprsenter

(0.3)10

en base 2, les

tapes sont les suivantes :


travail

0.3
2 0.3 = 0.6
2 0.6 = 1.2
2 0.2 = 0.4
2 0.4 = 0.8
2 0.8 = 1.6

reprsentation partielle

reste faire

0. . . .
0.0 . . .
0.01 . . .
0.010 . . .
0.0100 . . .
0.01001 . . .

0.3

0.3 1/4

0.3 1/4 1/16

A partir de la dernire ligne du tableau, on repart avec la valeur

0.6

qu'on a

dja rencontre la seconde ligne ; il est vident que la procdure va produire

1001 sans
0.3 en base 2
= (0.0 1001 1001 1001 . . .)2 .

des squences de chires

jamais s'arrter : il n'y a pas moyen de

reprsenter exactement

avec un nombre ni de chires. On a donc

(0.3)10

Un autre exemple avec


travail

0.7
2 0.7 = 1.4
2 0.4 = 0.8
2 0.8 = 1.6
2 0.6 = 1.2
2 0.2 = 0.4
Donc

(0.7)10

reprsentation partielle

reste faire

0. . . .
0.1 . . .
0.10 . . .
0.101 . . .
0.1011 . . .
0.10110 . . .

0.7
0.7 1./2
0.7 1/2 1/8
0.7 1.2 1/8 1/16

(0.7)10 = (0.1 0110 0110 . . .)2 .

Cette procdure fonctionne parce qu'en partant d'un nombre


premire multiplication

2n

aura un

gauche de la virgule si

52

n,

aprs la

est suprieur

1/2

: si ce n'est pas le cas, il faut placer un zro droite de la virgule, sinon il

1
2 . On peut prendre ce qui
reste reprsenter et le multiplier par 4 : si on obtient une valeur infrieure
faut placer un

et il ne reste reprsenter que

1, alors le second chire droite de la virgule est gal 0, sinon il est gal 1
et ainsi de suite. La multiplication des parties fractionnelles chaque ligne fait
qu'on multiplie ce qui reste reprsenter par 2 sur la premire ligne, par 4 sur
la ligne suivante, par 8 sur la troisime ligne et ainsi de suite.

6.1.2 Conversion de la partie fractionnelle d'un nombre


de la base 2 la base 10
Pour convertir un nombre fractionnel de la base 2 vers la base 10, il y a deux
mthodes pratiques.
Dans la premire mthode, on calcule la valeur en dcimal de chaque bit
1 et on additionne ces valeurs. Par exemple, pour convertir

n = (0.101001)2

on

voit que

= (0.101001)2
= (0.1)2 + (0.001)2 + (0.000001)2
= 21 + 23 + 26
= 1/2 + 1/8 + 1/64
= (0.5)10 + (0.125)10 + (0.015625)10
= (0.640625)10

Cette mthode prsente l'inconvnient qu'on est oblig de faire des divisions
pour chaque bit 1, puis une addition. Elle n'est recommander que quand le
nombre contient peu de bits 1.
Dans la seconde mthode, on fait la conversion d'un nombre de la base 2
vers la base 10, puis une seule division.

= (0.101001)2
= (101001)2 /6410
= (51)8 /6410
= 4110 /6410
= (0.640625)10

L'unique division est plus complique que dans la premire mthode mais elle
est unique.

6.2

Reprsentation des nombres en virgule xe

Une faon simple et pratique de reprsenter les nombres avec des parties
fractionnelles consiste choisir, en fonction des nombres que l'on souhaite reprsenter, une position xe pour la virgule.

53

Par exemple, si on utilise

bits pour reprsenter un nombre, on peut choi-

sir de placer la virgule entre le quatrime et le cinquime bit. Les huit bits

a7 a6 a5 a4 a3 a2 a1 a0 reprsenteront alors un nombre dont la partie entire est gale


a7 a6 a5 a4 et la partie fractionnelle a3 a2 a1 a0 .

L'avantage d'une telle reprsentation est que les additions et les multiplications sont simples. On additionne deux nombres en virgule xe de la mme
manire que deux nombres entiers. Pour la multiplication, on ne conserve que
les bits de gauche de la partie fractionnelle (en utilisant les bits de droite pour
l'arrondi) et les bits de droite de la partie entire (si les bits gauche de la partie
entire  ceux qu'on limine  contiennent autre chose que 0, c'est qu'on a un

dbordement de capacit : on ne peut pas reprsenter exactement le rsultat).

L'inconvnnient de la virgule xe, c'est qu'on ne peut pas reprsenter la


fois de trs grands et de trs petits nombres (voir exercice). Pour cela, on utilise
la reprsentation en virgule ottante, prsente dans la section suivante.

6.3

Reprsentation des nombres en virgule ottante

Le principe de la reprsentation en virgule ottante est de sparer les chires


signicatifs et la position de la virgule. Nous commenons par rappeler la mthode que nous utilisons couramment en base 10.

6.3.1 Virgule ottante en base 10


On utilise couramment la reprsentation en virgule ottante en base 10 pour
les trs grands et trs petits nombres, particulirement en physique. Sur les

notation scientique.
Ainsi, les chires signicatifs d'une grandeur (la mantisse) peuvent tre 1245.

calculettes, cette reprsentation est souvent appele la

L'usage est de positionner la virgule dans la mantisse droite du chire le plus


signicatif : la mantisse devient

1.2345. On ajoute ensuite un dplacement de la

virgule, not comme une multiplication par une puissance de 10.

1.2345 100
1.2345 101
1.2345 102
1.2345 1010
1.2345 101
1.2345 102
1.2345 1010

1.2345
12.345
123.45
12345000000.
0.12345
0.012345
0.00000000012345

Comme illustr dans la table prcdente, l'exposant de la puissance de 10


indique en fait o se place la virgule, ce qui permet de reprsenter des nombres
trs grands ou trs petits avec seulement quelques chires. Il est plus facile
d'crire la masse (suppose) d'une particule comme le boson

1031

eV plutt que

91187000000000000000000000000000
54

eV.

avec

9.1187

Pour multiplier ces nombres en virgule ottante, il sut de multiplier les


mantisses et d'ajouter les exposants. En revanche, l'addition est plus dlicate :
il faut reprsenter les deux nombres avec le mme exposant avant de pouvoir
additionner les mantisses. Ces caractristiques sont indpendantes de la base
(entire) choisie et s'appliquent donc aussi dans la base 2.

6.4

Virgule ottante en base 2

Pour reprsenter les nombres en virgule ottante d'une manire avec laquelle
les calculs sont aiss, les ordinateurs utilisent une reprsentation quivalente
la notation scientique des calculettes mais fonde la base 2.
Un nombre se reprsente avec un signe
La valeur du nombre est

s,

une mantisse

et un exposant

e.

(1)s m 2e .

6.4.1 Exemples de nombres en virgule ottante


Un nombre reprsent en virgule ottante contiendra donc un signe, une
mantisse qui indique la valeur et un exposant qui indique o se situe la virgule
dans la mantisse. Le tableau suivant donne des exemples de nombres positifs.
Dans la colonne de gauche, la mantisse et l'exposant sont tous les deux reprsents en binaire ; dans la suivante, on trouve la reprsentation en dcimal
de l'exposant binaire de dpart qui indique donc comment il faut dplacer la
virgule. Cela permet dans la troisime colonne d'crire le nombre comme un
nombre virgule ordinaire en binaire. La dernire colonne contient la reprsentation du nombre en dcimal.
ottant
binaire

1.1012 20
1.1012 21
1.1012 2102
1.1012 21
1.1012 2102
1.1012 210002
1.1012 210002

exposant
dcimal
0
1
2
-1
-2
8
-8

valeur

valeur

binaire

dcimale

1.1012
11.012
110.12
0.11012
0.011012
1101000002
0.000000011012

1.62510
3.2510
6.510
0.812510
0.4062510
41610
0.0063476562510

6.4.2 Les nombres en virgule ottante dans la mmoire


Les nombres en virgule ottante sont stocks dans les mots de la mmoire.
Dans les bits d'un mot, certains contiennent la mantisse, d'autres l'exposant. Le
rle des bits du mot est en gnral x d'une manire spcique au processeur.
On trouvera plus loin la prsentation du format prconis par la norme IEEE
754, qui est le format plus employ l'heure actuelle.
Je rappelle qu'il n'y a pas moyen, en examinant le contenu d'un mot de

55

mmoire de dterminer s'il contient un entier ou bien un nombre ottant (ou


une suite de caractres, ou le code d'une instruction, ou l'adresse d'un autre
mot mmoire ou n'importe quoi d'autre) : c'est le contexte seul qui permet de
dterminer la manire dont le contenu de la mmoire doit tre interprt.

6.4.3 Flottants ou rels


Dans certains langage de programmation, les nombres reprsents ainsi sont
appels des nombres

rels

mais il s'agit d'une approximation ; avec le nombre

xe de bits attribus l'exposant, il existe des limites au del desquelles les
nombres sont trop petits ou trop grands pour tre reprsents ; avec le nombre
xe de bits attribus la mantisse, il existe une innit de nombres rels voisins
qui auront la mme reprsentation en virgule ottante. (On le voit aisment en

m et en choisissant une
1.a1 am pour cette mantisse. Les nombres dirents 1.a1 am 1,
1.a1 am 01, 1.a1 am 001 etc. ont tous la mme approximation dans
xant un nombre de chires pour la mantisse, disons

valeur

notre reprsentation. Il est intressant que ce raisonnement puisse se tenir sans


prciser si la mantisse est reprsente en base 10 ou en base 2. )

6.5

La norme IEEE754

La norme IEEE 754 est la plus utilise l'heure actuelle pour reprsenter les
nombres en virgule ottante dans les ordinateurs. Elle xe un nombre de bits
pour la reprsentation des nombres sur 32 et 64 bits, elle traite de quelques cas
particuliers et spcie des manires d'arrondir le rsultat des oprations quand
on ne peut pas le reprsenter de manire exacte.
Les caractristiques les plus importantes de la norme IEEE 754 sont
 un nombre est cod sur 32 bits (simple prcision), ou 64 bits (double
prcision).
 la mantisse appartient l'intervalle [1,0 ; 10,0[ (en binaire).
 le seul chire gauche de la virgule tant toujours 1, n'est pas reprsent
(cela signie que 0 sera reprsent comme un cas particulier).
 la partie fractionnelle de la mantisse sera reprsente sur 23 bits (simple
prcision) ou 52 bits (double prcision).
 l'exposant est cod sur 8 bits en excdent 127 (simple prcision) ou sur
11 bits en excdent 1023 (double prcision).
En simple prcision, le bit de signe est cod par 1 bit, l'exposant sur 8 bits
et la mantisse sur 23 bits. Ainsi par exemple, soit un mot de 32 bits

(1 10000000 01001000000000000000000)
Il se dcoupe en un bit de signe qui vaut 1, les bits de l'exposant qui valent

10000000

et les bits de la mantisse

01001000000000000000000).

Le bit de signe est gal 1, donc le nombre est ngatif.

56

Les bits de l'exposant valent


sant est

(10000000)2 = 12810 ,

donc la valeur de l'expo-

128 127 = 1.
01001000000000000000000), donc la valeur de la
(1.01001000000000000000000)2 = (1.01001)2 = 1+9/32 = 1.28125.

Les bits de la mantisse sont


mantisse est

La valeur du nombre est donc

1.28125 21 = 2.5625
On peut aussi rsumer cette squence d'oprations avec :

1 (1.01001)2 2(10000000)2 (127)10


= (1 + 1/22 + 1/25 ) 2128127
= (2 + 1/2 + 1/24 )
= 2.5625
=

Exemple : reprsentation de 21.78125 en simple prcision


mence par convertir le nombre en binaire. Pour la partie entire,

101012 .

On com-

2110 = 258 =

Pour la partie fractionnelle :

0.78125
2 0.78125 = 1.5625
2 0.56250 = 1.125
2 0.125 = 0.25
2 0.25 = 0.5
2 0.5 = 1.0
On a donc

0. . . .
0.1 . . .
0.11 . . .
0.110 . . .
0.1100 . . .
0.11001 . . .

(21.7812)10 = (10100.11001)2 .

Il faut ensuite calculer la valeur de l'exposant :

(10101.11001)2

= (10101.11001)2 20
= (1.010111001)2 24

0.
(1.010011001)2 , il faut placer 01011100100000000000000

 Puisque le nombre est positif, le bit de signe vaut


 Puisque la mantisse vaut

dans les 23 bits de la mantisse.


 Puisque l'exposant vaut 4, il faut placer

127 + 4 = 13110 = (10000011)2

dans les huit bits de l'exposant.


Les 32 bits seront donc :

0 10000011 01011100100000000000000

6.5.1 Cas particuliers


La norme IEEE 754 prvoit un certain nombre de cas particuliers, qui sont
reprsents avec les bits de l'exposant qui codent 0 et 255 en simple prcision (0

57

et 2047 en double prcision). Si ce n'taient pas des cas particulier, l'exposant


vaudrait alors

0 127 = 127

et

255 127 = 128.

Si les bits de l'exposant valent 0 et que la mantisse vaut 0, alors c'est le


nombre 0 qui est reprsent (cela signie qu'il existe deux reprsentations du
nombre 0, suivant que le bit de signe vaut 0 ou 1, avec tous les autres bits 0).
Si les bits de l'exposant valent 0 et que la mantisse est dirente de 0, alors on
a la reprsentation

dnormalise d'un nombre : le chire gauche de la virgule

est gal 0 et l'exposant vaut

126 ;

cela permet de reprsenter de tous petits

nombres.
Si les bits de l'exposant valent 255 et que la mantisse vaut 0, alors le nombre
reprsente l'inni (+ ou

suivant la valeur du bit de signe). Cela est utilis

pour indiquer un dbordement de capacit.


Si les bits de l'exposant valent 255 et que la mantisse est dirente de 0,
alors ce n'est pas un nombre qui est reprsent. C'est ce qu'on obtient si on
extrait, par exemple, la racine carre d'un nombre ngatif. Une opration dont
l'un des deux oprandes n'est pas un nombre produit un rsultat qui n'est pas
un nombre non plus : le cas particulier est

propag.

Les fonctions qui impriment des valeurs de nombres en virgule ottante


impriment souvent

6.6

Inf

et

NaN

pour ces deux derniers cas particuliers.

Rsum

Une reprsentation des nombres rels existe. Elle ne permet pas de reprsenter de faon exacte l'ensemble des rels. Elle donne au pire une reprsentation du
nombre avec une prcision dpendant de la mantisse. Cette approximation, pouvant tre considr comme ngligeable, peut devenir problmatique lors d'oprations arithmtiques ou lors de conversion de type. (Un exemple de conversion
rate : l'chec du premier tir d Ariane 5 a t caus par une erreur du systme
informatique de guidage. Cette erreur est survenue lors d'une conversion de type
qui a caus un dpassement de capacit d'une variable. Parmi les recommandations mises suite cet accident on notera : Identier toutes les hypothses
implicites faites par le code et ses documents de justication sur les paramtres
fournis par l'quipement. Vrier ces hypothses au regard des restrictions d'utilisation de l'quipement. Vrier la plage des valeurs prises dans les logiciels par
l'une quelconque des variables internes ou de communication.)

6.7

Exercice

Exercice 6.1 : crire l'algorithme qui convertit la partie fractionnelle d'un


nombre de la base 10 vers la base 2. Vrier que l'algorithme ne rentre pas dans
une boucle innie, mme avec les nombres comme

(0.3)10

qui ont besoin d'un

nombre inni de chires en base 2 pour tre reprsents exactement.

58

Exercice

6.2 : Convertir

(1000100100.0010010001)2

en base 10 (sans ar-

rondi).

Exercice 6.3 : Convertir (1234.4321)10 en base 2 avec 16 bits gauche et


droite de la virgule.

Exercice 6.4 : Les mthodes de conversion entre les base 2, 8 et 16 sont-elles


utilisables pour la partie fractionnelle ? Donner une opinion, puis un exemple
(ou un contre-exemple), puis une dmonstration.

Exercice 6.5 : Si on reprsente un nombre sur 32 bits avec 16 bits gauche


et 16 bits droite de la virgule, quel est le plus petit et le plus grand nombres
positifs non nuls qu'on peut reprsenter ?

Exercice 6.6 : Mme question que la prcdente, sur 2n bits de reprsentation avec

bits gauche et

bits droite de la virgule.

Exercice 6.7 : crire un programme pour multiplier deux nombres reprsents en base 10 et en virgule ottante entre eux. Penser

normaliser

le rsultat

de faon n'avoir qu'un seul chire gauche de la virgule dans le rsultat.

Exercice 6.8 : Dterminer la main quelle est, en base 10, l'ordre de grandeur de la plus grande valeur qu'on peut reprsenter en simple prcision avec la
norme IEEE 754 ? La plus petite strictement positive sans utiliser les nombres
dnormaliss ? Avec les nombres dnormaliss ?
Variante : quelle l'ordre de grandeur des nombres suivants : (a)
2127 (b) 2126 (c) 223 2126 ?

Exercice

(2 223 )

v reprsente en virgule
x+v = x, cause des erreurs d'arrondi. crire un programme
n
pour dterminer cette valeur pour x = 1, x = 2, x = 4. Gnraliser pour x = 2 .
6.9 : Il existe une plus grande valeur

ottante telle que

Vrier avec le programme.

Exercice

6.10 : Quelle manipulation faut-il eectuer sur les bits de la re-

prsentation d'un nombre ottant pour le multiplier par 4 ? (c'est facile si on ne


tient pas compte du cas particulier des nombres dnormaliss).

Exercice 6.11 : crire un programme qui calcule la fonction exponentielle


avec la formule de Taylor :

ex = 1 + x +

x3
x4
xn
x2
+
+
+ +
2!
3!
4!
n!

Constater l'erreur d'approximation produite.

6.8

Supplment : un outil de calcul

Sous Unix/Linux, il existe une commande

bc qui permet de faire des calculs

sur des nombres de taille quelconque. On lance la commande puis on entre


au clavier des expressions sur une ligne et

bc

ache leur valeur ; on sort avec

Controle+D (la touche CTRL et la touche D presses en mme temps).


La taille des nombres manipuls n'est limite que par celle de la mmoire

59

disponible, ce qui permet de faire des calculs sur de trs grands nombres. On
peut calculer en virgule xe, en aectant

scale le nombre de bits conserver

droite de la virgule. On peut contrler les bases dans lesquelles les nombres
seront lues ou crites avec les variables

ibase

et

obase.

Voici une courte session avec bc, avec des commentaires en italique.

$ bc -q
2 * 3
6
2100

lancement de la commande
entre d'une expression
affichage du rsultat
entre d'une autre expression
affichage du rsultat
1267650600228229401496703205376
21000
entre d'une troisime expression
rsultat sur cinq lignes
10715086071862673209484250490600018105614048117055336074437503883703\
51051124936122493198378815695858127594672917553146825187145285692314\
04359845775746985748039345677748242309854210746050623711418779541821\
53046474983581941267398767559165543946077062914571196477686542167660\
429831652624386837205668069376
1/3
entre d'une expression
0
rsultat : les calculs se font sur des entiers
scale=10
pour avoir 10 chiffres droite de la virgule
1/3
entre de la mme expression
.3333333333
le rsultat avec la partie fractionnelle
obase=2
modification de la base de sortie
4321
entre d'une expression
1000011100001
affichage du rsultat
123.321
entre d'une expression
1111011.0101001000 affichage du rsultat
obase=10
retour la base de sortie originale
ibase=2
modification de la base d'entre
1000011100001
entre d'une expression
4321
affichage du rsultat
D
Contrle D
$
Fin de la session

60

Chapitre 7
Reprsentation des caractres

Nous prsentons dans ce chapitre les systmes de codage de caractres les


plus utiliss, en insistant tout particulirement sur les codes ascii, iso8859,
Unicode et utf.

7.1

Les codes de caractres

Les ordinateurs ne stockent et ne traitent que des nombres mais nous souhaitons aussi stocker des textes, qui se composent de caractres ; pour cette raison,
on utilise une convention dans laquelle chaque caractre est cod par un nombre.
On peut choisir n'importe quel codage pour les caractres mais il est bien sur
indispensable, quand on change de l'information, que l'metteur et le rcepteur
soient d'accord sur le codage employ.
De nombreux codes ont t utiliss ; on n'en rencontre certains que trs
rarement, comme le code Baudot qui tait utilis sur les Telex ou le code

ebcdic, spcique des gros ordinateurs d'IBM. A l'heure actuelle, la plupart


des systmes utilisent le code ascii ou l'une de ses nombreuses variantes.

7.2

Le code ASCII

A l'heure actuelle, le codage de caractre le plus utilis est le code ascii

American Standard Code for Information Interchange). Comme il est trs couramment utilis, il joue le rle de lingua franca entre ordinateurs.
(

7.2.1 Organisation du code ASCII


Le code ascii utilise sept bits pour reprsenter un caractre ; cela signie
donc qu'il permet de reprsenter

27 = 128

61

caractres dirents. En pratique, on

utilise le plus souvent un octet pour contenir un caractre cod en ascii, avec
le huitime bit zro. (Certains systmes de transmission utilisent le huitime
bit pour autre chose, par exemple pour transmettre une somme de contrle qui
permet de dtecter les erreurs de transmission les plus communes. On parle dans
ce cas d'un bit de

parit. )

NUL

DLE

10

20

30

40

50

'

60

70

SOH

DC1

11

21

31

41

51

61

71

STX

DC2

12

22

32

42

52

62

72

ETX

DC3

13

23

33

43

53

63

73

EOT

DC4

14

24

34

44

54

64

74

ENQ

NAK

15

25

35

45

55

65

75

ACK

SYN

16

&

26

36

46

56

66

76

BEL

ETB

17

'

27

37

47

57

67

77

BS

CAN

18

28

38

48

58

68

78

HT

EM

19

29

39

49

59

69

79

LF

SUB

1A

2A

3A

4A

5A

6A

7A

VT

ESC

1B

2B

3B

4B

5B

6B

7B

FF

FS

1C

2C

<

3C

4C

5C

6C

7C

CR

GS

1D

2D

3D

4D

6D

7D

RS

1E

2E

>

3E

4E

5D

SO

5E

6E

7E

SI

US

1F

2F

3F

4F

5F

6F

DEL

7F

Table 7.1  Le jeu de caractres ASCII et leur correspondance en hexadcimal

Les 33 premiers codes (de 0 32) et le dernier (code 127) codent des choses
qui ne sont pas imprimables mais qui peuvent tre utilises pour contrler les
comportements des priphriques. Par exemple le code

(bel) provoque un

bip sur l'ordinateur qui l'ache. Certains de ces codes controlent la position du
prochain caractre : le code 10 (A16 , lf comme

Line Feed) provoque un passage


Cariage Return) un retour

la ligne suivante et le code 13 (D16 , cr comme

sur la premire colonne de la ligne. Le code numro 32 (2016 ) est utilis pour le
caractre espace.
Les autres codes sont utiliss pour reprsenter les caractres alphabtiques
usuels (en majuscule et en minuscule), les chires et les symboles de ponctuation
les plus courants.
Le code

27 (1B16 , esc pour escape, chappement) joue un rle particulier : il

sert indiquer que les codes qui suivent ne sont pas du code ascii mais doivent
tre interprts d'une faon spciale qui dpend du contexte.

7.2.2 Les limites du code ASCII


Le code ascii prsente quelques limites qui sont dues au petit nombre de
caractres qu'il peut coder ; il lui manque des caractres importants, comme

62

le symbole de la multiplication. (Pour cette raison, les informaticiens ont pris


l'habitude de noter la multiplication en utilisant le caractre

*.)

Surtout, le code ascii, comme son nom l'indique, est un code amricain et ne
permet donc de coder aucun des caractres spciaux qui apparaissent dans les
autres langues europennes comme les caractres accentus ou le double ss de
l'allemand. Pour les langues qui utilisent d'autres alphabets comme le grec, les
langues slaves, l'arabe et le persan, l'hbreu ou de nombreuses langues indiennes,
ou pour les langues orientales (chinois, japonais, coren), qui s'crivent avec des
idogrammes, le code ascii est compltement inadquat.
Il existe de nombreux codes pour pallier aux insusances du code ascii,
si nombreux qu'il est parfois dicile de s'y retrouver ; les plus importants sont
probablement les codes iso8859 et le couple form par Unicode et utf.

7.3

La norme iso8859 : une extension du code


ASCII

La norme iso8859 exploite le fait que le code ascii n'utilise que sept bits
pour un caractre qui est presque toujours stock sur huit bits, dans un octet ;
ceci permet de coder 128 nouveaux caractres, avec les codes entre 128 et 255,
alors que les codes entre 0 et 127 s'interprtent de la mme faon que dans le
code ascii.
Ceci prsente l'avantage d'une compatibilit ascendante et descendante avec
le code ascii. La compatibilit est

ascendante parce qu'un programme qui s'at-

tend lire un texte cod en iso8859 pourra interprter correctement ce texte s'il
est cod en ascii. Elle est aussi

descendante parce qu'un programme qui attend

quelque chose cod en ascii reconnaitra dans le texte tous les caractres qui
peuvent tre cods en ascii. (Naturellement, un programme qui attend du code

ascii et qui reoit un texte cod en iso8859 ne pourra pas interprter comme
il convient les codes compris entre 128 et 255 qui n'existent pas dans le code

ascii.)
Comme il existe bien plus de 128 caractres coder en dehors de ceux qui
sont dja prsents dans le code ascii, la norme iso8859 est construite autour
de variantes, qui indiquent de quelle faon les codes entre 128 et 255 doivent
tre interprts ; la variante la plus importante pour nous est nomme iso8859-1
(parfois aussi nomme

iso-latin-1)

qui contient les caractres accentus utili-

ss en Europe occidentale. (Pour mmoire, d'autres variantes communes sont


l'iso8859-2 pour l'Europe de l'est, l'iso8859-3 pour l'Europe du sud, l'iso8859-4
pour l'Europe du nord, l'iso8859-5 pour l'alphabet cyrillique, l'iso8859-6 pour
l'arabe, etc. )
La norme iso8859 prsente quelques inconvnients majeurs ; d'une part il
manque dans la variante iso8859-1 un caractre essentiel, le  e dans l'o  ()
qu'on trouve en franais dans des mots courants comme

cur ou uvre. D'autre

part, la division du code en page oblige au minimum accompagner chaque

63

texte d'une information supplmentaire qui indique quelle variante du code est
utilise ; ceci complique singulirement les choses pour les textes qui doivent
mlanger des caractres de plusieurs variantes, comme un texte en franais qui
contient une citation du grec par exemple. Finalement, les 128 nouveaux codes
sont largement insusants pour les langues idogrammes qui ont besoin de
plusieurs milliers de codes dirents.

7.4

Unicode : un codage sur seize bits

Une faon de rsoudre les problmes des normes comme l'iso8859 consiste
modier le nombre de bits utiliss pour coder un caractre ; c'est ce que fait la
norme Unicode, dans laquelle chaque caractre est reprsent sur 16 bits, ce qui
permet de coder 65536 caractres dirents ; c'est susant pour coder peu prs
toutes les critures connues, condition d'utiliser des codes identiques pour les
idogrammes chinois, corens et japonais qui se dessinent de manire identique,
mme quand leurs signications sont direntes dans ces trois langues.
En utilisant Unicode, on peut mlanger plusieurs alphabets dans un mme
document, sans avoir besoin de changer de systme de codage, ce qui est prcieux. D'ici quelques annes, Unicode (avec utf prsent dans la section suivante) va probablement s'imposer comme le standard de codage de caractres
le plus rpandu.
Le codage Unicode prsente deux inconvnients : les documents sont deux
fois plus gros qu'avec le code ascii et il est incompatible avec l'

ascii.

Le fait que les documents soient deux fois plus volumineux n'est pas un gros
problme ; la capacit des disques et les vitesses de transport de l'information
augmentent susamment vite pour que ce problme puisse tre ignor. En revanche, l'incompatibilit avec le code ascii pose un problme dicile ; il est bien
sr hors de question de modier tous les systmes pour qu'ils utilisent Unicode
et il est hors de question de ne pas laisser les nouveaux systmes qui utilisent
Unicode dialoguer avec les anciens systmes qui utilisent l'ascii ou une de ses
extensions. C'est la raison d'tre de la norme utf que nous prsentons dans la
section suivante.

7.5

UTF : un codage longueur variable

Unicode est incompatible avec le code ascii, ce qui est un rel problme. La

Unicode Translation
Format, qui permet de maintenir la compatibilit avec le code ascii.
solution consiste lui associer un autre code, utf comme

En utf, chaque caractre est cod sur un, deux ou trois octets. Tous les
caractres du code ascii sont cods en utf sur un octet

avec la mme valeur

qu'en ascii. En revanche, un octet qui contient une valeur suprieure 127
annonce un caractre sur deux ou trois octets et utf est construit de telle

64

Programme

UTF8

UTF8

Copie
Conversion

Conversion

Unicode

Unicode
Traitement

Figure 7.1  Un programme lit et crit du texte cod en utf mais le convertit
en Unicode quand le texte doit tre modi.

manire que tous ces octets contiennent un code suprieur 127. Ce mcanisme
garantit une compatibilit ascendante et descendante avec l'ascii.
La compatibilit est ascendante, puisqu'un programme qui lit des caractres
cods en utf interprtera correctement un chier ascii (les codes utf entre
0 et 128 codent les mmes caractres que l'ascii). Elle est aussi descendante,
puisqu'un programme qui traite de l'ascii et qui reoit un chier utf interprtera correctement tous les caractres de ce chier qui apparaissent dans le
code ascii (puisque quand un caractre est cod sur plusieurs octets, tous les
octets contiennent des valeurs suprieures 127, qui n'appartiennent pas au
code ascii).
Un algorithme assez simple permet de traduire l'Unicode en utf et inversement.
Les programmes, en gnral, ne peuvent pas utiliser simplement l'utf pour
manipuler du texte, parce que c'est un code de longueur variable. Or un codage
de longueur variable complique srieusement l'criture des programmes : par
exemple, pour trouver le 2843me caractre d'un texte, il est ncessaire d'examiner les 2842 caractres prcdents, qui peuvent occuper un nombre variable
d'octets, an de savoir dans quels octets prcisment le caractre est stock.
Avec un codage de longueur xe, on sait sans examiner les caractres prcdents que le 2843me caractre est stock partir de l'octet numro 2842

taille d'un caractre.

la

De ce fait, dans les systmes qui supportent Unicode + utf, la structure


des programmes est celle dcrite dans la gure 7.1. Tous les programmes lisent
des donnes textuelles encodes en utf ; les programmes qui ne manipulent

65

pas le texte peuvent transmettre directement ces donnes ; ceux qui ont des
traitements eectuer sur le texte commencent par le convertir en Unicode,
incompatible avec l'ascii mais de longueur xe, ils traitent les donnes sous
leur forme Unicode, puis ils reconvertissent les donnes en utf au moment de
produire les rsultats.
Dans la bibliothque du langage C, les caractres Unicode sont appels des

wide char et dnis avec le type wchar_t ; les caractres en UTF sont appels des
multi-byte string. La plupart des fonctions qui eectuent des oprations usuelles
ont un quivalent pour les wide chars ; par exemple la fonction strcat dnie
pour les chanes ascii a un quivalent

7.6

wcscat

pour les chanes Unicode.

la commande file

Il existe une commande

file

qui s'eorce de deviner le contenu d'un chier

en examinant son contenu. On peut l'utiliser pour distinguer entre les chiers
qui contiennent de l'UTF et ceux qui contiennent de l'iso8859. Voici un exemple
comment d'utilisation

$ ls
# Le rpertoire est vide
$ cat > f1.txt
# Fabrication d'un fichier.
Ce texte ne contient pas d'accents
$
# Pour terminer la commande cat,
$
#
j'ai tap sur les touches Controle et D en mme temps.
$ ls
# Le fichier a bien t cr.
f1.txt
$ file f1.txt
# Que contient le fichier ?
f1.txt: ASCII text
$ cat > f2.txt
# Un deuxime fichier.
Avec un caractre accentu.
$
# Ici aussi, contrle-D pour finir
$ file f2.txt
# Que contient le fichier ?
f2.txt: UTF-8 Unicode text
$
# Conversion du contenu du fichier
$ tcs -f utf -t 8859-1 < f2.txt > f3.txt
$ file f3.txt
# Que contient le rsultat ?
f3.txt: ISO-8859 text
$
# Conversion dans l'autre sens.
$ tcs -f 8859-1 -t utf < f3.txt > f4.txt
$ file f4.txt
# Rsultat.
f4.txt: UTF-8 Unicode text
$ cmp f2.txt f4.txt
# Comparaison avec le fichier de dpart :
# Pas de message = ils sont identiques.
# On peut utiliser file avec n'importe quel fichier
$ file .
.: directory
66

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses share

7.7

Rsum

Pour reprsenter des caractres dans un ordinateur, il sut de choisir un


codage qui utilise des nombres pour reprsenter des caractres. Le systme de
codage le plus utilis est le codage ascii, sur 7 bits, qui ne peut coder que les
caractres amricains. Le codage iso8859 tend l'ascii sur 8 bits, pour coder
de nouveaux caractres ; ainsi l'iso8859-1, appel aussi iso-latin-1, code les
caractres utiliss en europe occidentale.
Un autre systme de codage utilise en combinaison, Unicode, un code sur
16 bits pour reprsenter les informations dans les programmes et utf (comme

Unicode Translation Format),

un code de longueur variable, pour transmettre

les informations.
Entre iso8859 et utf8, prfrez utf8.

7.8

Exercices

Exercice

7.1 : Installer sur votre ordinateur un programme capable de

convertir entre direntes normes de codage de caractres. Par exemple, un


programme nomm

iconv ou tcs, comme Translate Character Set font l'aaire.

Quels sont les codages que supporte ce programme ? En citer deux qui ont une
compatibilit ascendante avec l'ascii (en dehors de l'utf et de l'iso8859) et un
qui est incompatible. Ne pas oublier de mentionner la manire dont vous avez
dtermin cette compatiblit.

Exercice 7.2 : Sauver un chier, avec des caractres accentus avec les deux

cat, more et
less. Dcrire ce que vous observez. (Facultatif ) S'il y a un problme, provient-il

systmes de codage iso8859-1 et utf-8. Les lire avec les commandes


de la commande, du terminal ou du systme ?

(Sous emacs, il y a un caractre en bas gauche qui indique avec quel systme
de codage le contenu du chier sera crit. Il y a un 'u' pour Unicode-utf, un 1
pour l'iso8859-1 etc. Avec la commande

M-X set-buffer-file-coding-system on peut choisir le codage employ pour


le chier.

Le but de l'exercice est d'avoir des chiers qui contiennent les mmes caractres accentus en iso8859-1 et en utf-8 ; vouz pouvez utiliser un autre outil
qu'emacs si vous le prfrez ; notez cependant qu'Emacs, bien qu'un peu compliqu matriser au dpart, est l'diteur de texte prfr de beaucoup de programmeurs.)

Exercice 7.3 : Dans les chiers html, on peut indiquer le codage de caractre

utilis dans le chier avec une ligne dans l'en-tte de la forme :

67

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


ou

<meta http-equiv="Content-Type" content="text/html; charset=iso8859-1" />


Que voit-on quand on essaye d'acher comme de l'utf-8 un chier qui contient
de

iso8859-1 ?

Et quand on essaye d'acher comme de l'iso8859-1 un chier

qui contient de l'utf-8 ?

Un chier html lmentaire peut contenir les lignes

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<body>
Caractres accentus
</body>
</html>
Si le chier s'appelle

toto.html.

toto.html,

on peut voir son contenu avec

firefox

Exercice 7.4 : (assez dicile, pas de corrig) Trouver une squence de carac-

tres accentus du franais qui, encode en iso-8859, donne autre chose qu'une
erreur en utf8.

7.9

Supplment : exercice type corrig sur les


conversions

Ce chapitre conclue la partie sur direntes manires de reprsenter de l'information avec des bits dans la mmoire de l'ordinateur. Voici un exercice corrig
sur le sujet.

Enonc

: tant donn quatre octets qui contiennent les valeurs binaires

1001 1100, 0100 0011

et

1000 0000,

0010 1000,

que reprsentent-ils si

1 ce sont quatre nombres non signs (sur 8 bits) ?


2 ce sont deux nombres nombres non signs (sur 16 bits) ? Que vaut leur
somme en binaire ? en dcimal ?
3 ce sont quatre nombres en complment deux (sur 8 bits) ?
4 ce sont deux nombres en complement deux (sur 16 bits) ? Que vaut leur
somme en binaire ? en dcimal ?
5 S'il s'agit d'un nombre entier sur 32 bits, quel est son ordre de grandeur ?
6 S'il s'agit d'un nombre ottant sur 32 bits, quel est-il avec la mantisse
exprime en binaire ? En dcimal ?
7 S'ils sont senss coder quatre caractres ASCII ? ISO-8859-1 ? UTF ?

68

1 0010 10002 = 00 101 0002 = 0508 = 4010 , 1001 11002 = 10 011 1002 = 2348 =
(2 8 + 3) 8 + 4 = 15610 , 0100 00112 = 01 000 0112 = 1038 = 6710 , 1000 0000 =
27 = 12810 .
2

En supposant que le premier octet contient les poids forts : [Ce n'est pas un

problme si on suppose que c'est le second octet qui contient les poids forts.]

0 010 100 010 011 1002 = 0242348 = (((28+4)8+2)8+3)8+4 = 10 39610 ,


0 100 001 110 000 0002 = 0416008 = ((4 8 + 1) 8 + 6) 8 8 = 17 28010
Leur somme en binaire :

+
=

0 110 , 110 000 011 1002 = 0660348 = 2767610 . [On


10 39610 + 17 28010 .]

Sa valeur en dcimal :

peut vrier facilement que le rsultat est correct avec

Si ce sont des nombres en complments 2, le premier et le troisime sont

des nombres positifs qui ont la mme valeur qu'au (1).


Le deuxime et le quatrime sont des nombres ngatifs. Commme

C1 (10 011 100) + 1 = 01 100 001 + 1 = 01 100 0102 = 1428 = 9810


reprsente 98 ; le quatrime vaut 128.

C2 (10 011 100) =


le deuxime

Si ce sont des nombres en complment 2 sur 16 bits ils sont positifs tous

les deux puisque leurs bits de signe sont 0 et ils valent (comme au 2)
et

17 28010 .

positif et vaut donc aussi

10 39610

Le rsultat de leur addition (eectue au 2) est aussi un nombre

2767610 .

Toujours en supposant que les bits de poids forts sont dans le premier octet,

00 101 000 100 111 000 100 001 110 000 0002 . Le bit 1 le plus
229 = 29 220 soit environ
6
8
512 10 = 5.12 10 . L'ordre de grandeur du nombre est donc de 108 ,

le nombre vaut

gauche est en position numro 29, il code pour

En supposant qu'on a d'abord le bit de signe, puis l'exposant, puis la partie

fractionnelle de la mantisse :
Le signe contient

: c'est un nombre positif.

L'exposant contient

01 010 0012 = 1218 = 7310 .

L'exposant vaut donc

127 + 73 = 54
100 111 000 100 001 110 000 000,
1.100 111 000 100 001 1102
1101102
La valeur du nombre est donc 1.100 111 000 100 001 1102 102
en binaire.
La partie fractionnelle de la mantisse contient

la mantisse vaut donc

0.100 111 000 100 001 1102 = 0.4704168 =


(1 + 470416x218 ) 254 en dcimal.

La partie fractionnelle de la mantisse est

470416x218 ,

donc le nombre vaut

69

Le deuxime et le quatrime sont suprieurs 127 : il ne peuvent pas re-

prnter des caractres ASCII. La commande

man ascii

permet de constater

que le premier code un parentse ouvrante et le troisime le caractre C. [Si


les conditions d'examen ne prvoient pas une table des caractres ASCII, cette
dernire partie est facultative.]
En ISO-8859-1 le premier et le troisime codent toujours la parenthse ouvrante et le C majuscule comme dans le code ASCII ; le deuxime et le quatrime
codent des caractres qui n'appartiennent pas au code ASCII. Ce sont tous les
deux des

 caractres de contrle tendus  ce qui signie qu'ils ne sont-il pas im-

primables. [Si les conditions d'examen ne prvoient pas une table des caractres
ISO-8859-1, cette dernire partie est facultative.]
En UTF, le premier octet est infrieur 128 et code donc le mme caractre
que l'ASCII ; le second est suprieur ou gal 128 et devrait donc tre le premier
octet d'un caractre sur 2 ou 3 octets mais comme le caractre suivant est
infrieur 128, cela signie qu'il y a une erreur de codage. C'est pareil pour le
troisime et le quatrime (ASCII et erreur).

7.10

Supplment : saisir des caractres divers au


clavier

Pour taper les caractres qui n'apparaissent pas sur le clavier, il existe une
mthode simple pour les obtenir avec une suite de frappe de touches sous X11,
avec la touche

Compose.

Cette touche n'est en gnral pas prsente sur le cla-

vier mais les systmes de gestion de fentre Gnome et KDE (ou la commande

xmodmap)

permettent d'utiliser la place une touche inutilise du clavier, par

exemple une touche

Windows.

7.10.1 Choisir Compose avec les versions Ubuntu de 2013


Avec les distributions de Linux qui utilisent des systmes de gestion de fentres, on peut choisir sa touche Compose directement avec des clics. Dans le
menu de gestion du clavier, choisir la disposition du clavier puis les options ;
parmi les options, il y a une entre pour choisir la position de la touche Compose.

xmodmap par exemple


xmodmap -e "keycode 115 = Multi_key", la di-

Sur la ligne de commande, on peut utiliser la commande


avec quelque chose comme
cult tant d'identier le
commande

xev

keycode, le code interne qui correspond la touche ; la

permet de rsoudre ce problme assez facilement.

7.10.2 Taper un caractre non-standard


Les caractres composs s'obtiennent en tapant sur le clavier la touche Compose puis deux autres touches. Par exemple, <Compose> 1 2 donne le caractre

70

1
<Compose> ' e donne le caractre ''. <Compose> s s donne le ca2
ratre ''. On devine facilement les caractres taper : il s'agit en gnral de
pour ' '.

l'accent puis de la lettre.


Vous pouvez maintenant utiliser les guillemets franais  et , qu'on obtient
bien sur avec

Compose < <

et

Compose > >.

71

Chapitre 8
Algbre de Boole

Comment reprsenter avec deux valeurs des connaissances (propositions) et


eectuer des oprations sur ces connaissances ? Par exemple comment reprsen-

si ((un panneau ralentir est prsent) et (automobiliste disciplin))


ou (voyant allum) alors ralentir.
La solution consiste dnir ralentir comme tant une fonction logique qui
dpend des variables binaires panneau ralentir prsent, automobiliste disciplin
et voyant allum. Pour calculer le rsultat de la fonction ralentir, on utilise une
ter et traiter :

algbre, nomme algbre de Boole.

8.1

Les fonctions logiques

Dans cette algbre une variable peut prendre deux valeurs, vrai ou faux
(codes respectivement par
codent les valeurs

et

et

F ).

(On rencontre souvent des auteurs qui

faux et vrai avec les chires 0 et 1. J'ai fait ici le choix d'utiliser

pour viter la confusion avec les chires utiliss pour reprsenter les

nombres. ) Il y a trois fonctions de base, qui permettent de construire d'autres


fonctions :

et, ou, non.

table
de vrit. La table de vrit d'une fonction logique donne la valeur de la fonction
Pour chacune d'elles, nous donnons son criture algbrique ainsi que sa

pour toutes les combinaisons des valeurs des variables. Pour une fonction qui
contient

variables, la table de vrit comporte

2n

lignes. Il existe plusieurs

manires courantes de reprsenter les fonctions logiques, que nous indiquons


devant chaque table de vrit.
La fonction

non : f (x) = x = x =x
x

72

La fonction

La fonction

ou : f (x, y) = x + y = x y = x|y
x

x+y
F

et : f (x, y) = x.y = xy = x y = x&y


x

xy

Sur la base de ces trois fonctions, nous pouvons rcrire la fonction du premier exemple et en donner la table de vrit :

f (x, y, z) = x.y + z
x

f (x, y, z)
F

n variables se dcrit avec une table de vrit de 2n


lignes. Chaque ligne peut prendre l'une des deux valeurs V et F . Il existe donc
n
22 fonctions logiques direntes avec n variables. Par exemple, il existe quatre
fonctions une seule variable : f (x) = V et f (x) = F qui donnent toujours
le mme rsultat quel que soit la valeur de la variable, f (x) = x, l'identit et
f (x) = x, la fonction NON dja vue. D'autres fonctions boolennes existent
Une fonction logique avec

qu'il est utile de connatre :


La fonction

La fonction

ni ou non-ou ou nor : f (x, y) = x + y = x.y


x

x+y

non-et ou nand : f (x, y) = xy = x + y


73

La fonction

x.y

ou exclusif ou xor : f (x, y) = x y = xy + xy


xy

8.1.1 Fonctions logiques et tables de vrit


Pour acqurir un peu de familiarit avec la manipulation des fonctions logiques, il est utile de savoir dterminer la table de vrit de n'importe quelle
fonction partir de son quation et inversement de dterminer l'quation d'une
fonction partir d'une table de vrit.

De l'quation de la fonction la table de vrit


Pour dterminer la table de vrit d'une faon systmatique, le plus simple
est de commencer par dterminer

n le nombre de variables, qui xe le nombre de

lignes (2 ) et de placer et remplir dans la table les colonnes qui correspondent


ces variables, pour numrer tous les cas possibles sans en manquer. Par
exemple, traitons la fonction :

f (x, y, z) = x.y.z + x.y.z + x.y.z


La fonction a trois variables ; la table de vrit a donc 8 lignes. On commence
donc par remplir les trois premires colonnes avec toutes les combinaisons possibles de valeurs pour ces variables :

74

faire

Un truc pour ne pas oublier de ligne dans la table de vrit : si on remplace


dans les trois colonnes les

par des 0 et les

par des 1, on voit qu'on a sur

chaque ligne, dans l'ordre, la reprsentation binaire des nombres entre 0 et

7.

On identie ensuite les composants de l'quation et on rajoute des colonnes


intermdiaires, o on calcule, ligne par ligne, la valeur de ces composants.
(Quand on a une certaine familiarit avec les fonctions logiques, on peut se
dispenser de certaines colonnes intermdiaires et les calculer de tte.) Avec la

f , les colonnes intermdiaires peuvent tre (1) x, (2) y , (3) z , (4) x.y.z ,
x.y.z et (6) x.y.z . La faon qui conduit se tromper le moins consiste
remplir le tableau colonne par colonne. Ainsi pour remplir la colonne x.y.z , on
repre sur la gauche les colonnes x, y et z et sur chaque ligne, on place un
V si les trois colonnes d'origine contiennent V , on place un F sinon. La table
fonction
(5)

devient :

x.y.z

x.y.z

x.y.z

F
F

faire

On continue jusqu'a ajouter la colonne qui correspond la fonction recherche.

x.y.z

x.y.z

x.y.z

Pour prendre un autre exemple, calculons la table de vrit de la fonction

f (a, b, c) = a + b + c. On va partir des valeurs des trois variables a, b et c (la


3
table aura donc 2 = 8 lignes), puis ajouter et remplir l'une apres l'autre des
colonnes pour les expressions intermdiaires a, puis a + b et nalement a + b + c.
La table compltement remplie sera donc la suivante :

75

a+b

a+b

a+b+c

a+b+c

De la table de vrit l'quation


Pour dterminer une quation partir d'une table de vrit, une mthode
simple consiste, pour chaque ligne o la fonction vaut

V,

rajouter un

terme

qui exprime la valeur des variables sur cette ligne. La fonction sera un OU entre
ces

termes, puisque l'un d'entre eux sera vrai dans chacun des cas o la fonction

est vraie. Repartons de la table de vrit de la fonction prcdente, en omettant


les colonnes que nous avons utilises pour les calculs intermdiaires :

Il y a trois lignes o la fonction a la valeur vraie : l'expression logique qui


traduira la fonction sera donc un

ou entre trois termes. La premire ligne o la

fonction est vraie est

La fonction sera donc vraie quand le terme

a.b.c

sera vrai. De mme la seconde

ligne o la fonction est vraie :

correspond au cas o le terme

a.b.c

sera vrai. La troisime ligne :

76

correspond

a.b.c.

La fonction sera donc vraie quand l'un de ces trois cas se

produira et on peut la traduire par l'quation

f (a, b, c) = a.b.c + a.b.c + a.b.c.

La mthode dmontre au passage que n'importe quelle fonction logique peut


s'exprimer avec une combinaison de

et, ou

et

non,

puisque n'importe quelle

fonction logique peut s'exprimer par une table de vrit et que nous pouvons
traduire de cette faon n'importe quelle table de vrit en quation base de

Et,

de

Ou

et de

Non.

On dit que ces oprateurs logiques sont

universels.

Il y a

d'autres combinaisons d'oprateurs universels (voir exercice).


Cette mthode pour obtenir une quation partir d'une table de vrit est
simple mais elle ne conduit pas ncessairement l'quation la plus simple. Par
exemple, la fonction
valeurs de

et

b)

f (a, b) = V

(qui est toujours vraie, quelles que soient les

a la table de vrit suivante :

L'application de notre mthode nous donne, pour la fonction l'quation

f (a, b) = a.b + a.b + a.b + a.b


qui n'est vraiment pas plus simple que l'quation de dpart !

Simplication algbrique des expressions logiques


Des proprits peuvent tre dmontres qui sont utiles pour la manipulation
des expressions, rsumes dans la table suivante : (Une mthode de dmonstration longue mais simple pour dmontrer ces thormes consiste crire la table
de vrit des parties gauche et droite de l'galit et de constater leur galit.
Elle manque cependant d'lgance ; de plus, on ne peut pas l'employer quand le
nombre de variables est indtermin, comme dans le thorme de Morgan.)
1 variable

2 variables
3 variables

nb quelconque

x=x
x+F =x
x.F = F
x+V =V
x.V = x
x+y =y+x
x.y = y.x
x + y + z = (x + y) + z = x + (y + z)
x.y.z = (x.y).z = x.(y.x)
x.(y + z) = x.y + x.z
x + (y.z) = (x + y).(x + z)
x + y + ... + z = x.y.....z
x.y.....z = x + y + ... + z

77

commutativit
associativit
distributivit
Thorme de
Morgan

Chacune de ces expressions peut se traduire en franais et correspond une


proprit vidente (sauf peut-tre pour le thorme de Morgan) des expressions
logiques.
Attention ne pas confondre les oprateurs logiques

Et et Ou avec l'addition

et la multiplication (qu'on reprsente avec les mmes caractres mais dans un


autre contexte) : la dirence la plus droutante est que le
sur le

Et (x + (y.z) = (x + y).(x + z))

Ou

est distributif

alors que l'addition ne l'est pas sur la

multiplication.
Une proprit magnique de l'algbre de Boole, qui apparait bien dans cette
table, est que si on change tous les V et les F, tous les ET et les OU, le systme
continue fonctionner de la mme manire.

8.2

Simplication des expressions logiques

Comme nous l'avons vu, il y a plusieurs expressions logiques qui sont toujours
gales entre elles. Quand on ralise un circuit lectronique, il est souhaitable
d'utiliser l'expression la plus simple, puisque c'est celle qui utilisera le moins de
transistors.
Nous montrons brivement dans cette section deux mthodes de simplication. L'une des mthodes est

algbrique

: elle n'utilise que des manipulations

de symboles. L'autre mthode utilise un support graphique, dit des

Karnaugh

(prononcer

Karnaugh

comme

carno)

tables de

et permet de trouver la forme

simplie des expressions trois ou quatre variables.

8.2.1 Simplications algbriques des expressions logiques


En utilisant les axiomes et les thormes de l'algbre de Boole, on peut
simplier les fonctions logiques. L'opration ressemble la factorisation des polynomes, en utilisant la ressemblance entre le

et de la logique et la multiplication

de l'arithmtique d'une part et entre le

de la logique et l'addition d'autre

ou

part.
On peut aussi s'appuyer l'occasion sur le fait que

x+x

vaut

Vrai.

x.x

vaut

Faux alors que

Par exemple, partir de la fonction

f (x, y, z) = x.y.z + x.(y.z + y.z)


on dveloppe en :

f (x, y, z) = x.y.z + x.y.z + x.y.z


Il y a deux factorisations tentantes, par

x.y

et par

x.z . Utilisons le fait a = a + a

pour dupliquer le terme qui entre dans les deux factorisations :

f (x, y, z) = x.y.z + x.y.z + x.y.z + x.y.z


R-ordonnons les termes :

f (x, y, z) = x.y.z + x.y.z + +x.y.z + x.y.z


Factorisons par (x.y) et par x.z :
78

f (x, y, z) = x.y.(z + z) + +x.z.(y + y)


Puisque a + a = V :
f (x, y, z) = x.y.V + +x.z.V
Puisque a.V = a :
f (x, y, z) = x.y + x.z
Factorisons par x :

f (x, y, z) = x.(y + z)
En partant d'une expression qui contenait 9 oprateurs logiques, nous avons
russi obtenir une expression quivalente qui n'utilise plus que deux oprateurs
logiques.
Un deuxime exemple :

a.(a + b)

= a.a + a.b
= a + a.b
= a.V + a.b
= a.(V + b)
= a.V
=a

dveloppement
puisque
puisque

x.x = x
x = x.V
a
V +x=V
x.V = x

factorisation par
puisque
puisque

La mise en uvre des simplications algbriques demande une certaine pratique et un peu de air. Il convient de rpter les exercices proposs jusqu' tre
en mesure de les faire sans recourir aux corrigs. La prochaine partie montre
une faon mcanique de simplier certaines expressions logiques.

8.2.2 Simplication des expressions logiques avec les tables


de Karnaugh
La mthode des tables de Karnaugh permet de trouver mcaniquement la
forme en minterme la plus simple de n'importe quelle expression logique qui ne
contient pas plus de quatre variables.
La mthode de Karnaugh est base sur l'identit

ax + ax = a.

C'est une

mthode graphique qui consiste placer des termes les uns cot des autres
quand ils n'ont qu'une variable qui change de valeur, de faon mettre en
vidence cette identit.
Deux termes sont dits adjacents si l'tat des variables qui les composent sont

x.y.z.t est adjacent x.y.z.t,


t est dirent. En revanche x.y.z.t et x.y.z.t ne
variables y et z dirent entre les deux termes.

identiques l'tat d'une variable prs. Par exemple


puisque seul l'tat de la variable
le sont pas puisque les deux
La mthode consiste :
1. Construire la table de Karnaugh,
2. Raliser des groupements de

2n

termes en

 minimisant le nombre de groupements,


 maximisant le nombre de termes par groupement.

79

2n

3. Pour chaque regroupement de

termes, liminer les

variables qui

changent d'tat et dduire le terme rsultant compos du produit des


variables directes ou inverses qui n'ont pas chang d'tat.
4. crire l'expression logique nale qui est la runion des termes trouvs
l'tape prcdente.

Construction de la table de Karnaugh


Nous donnons ici les tables de Karnaugh pour 2, 3 et 4 variables.

b\a

V
F

c\ab
F
V

FF

FV

VV

VF

cd\ab
FF
FV
VV
VF

FF

FV

VV

VF

En haut gauche on rappelle quelles sont les variables considres : dans la


dernire table, chaque colonne rendra compte des valeurs de variables
chaque ligne de celles des variables

et

et

b,

d.

Chaque case joue le mme rle qu'une ligne dans une table de vrt : elle
indique une combinaison de la valeur des variables. Par exemple, la case en bas
droite de la dernire table est dans la colonne

V F,

donc pour laquelle

est

vrai et b est faux et sur la ligne V F , donc pour laquelle c est vrai et d est faux.
Elle correspond donc au terme

a.b.c.d.

Les lignes et les colonnes sont places dans un ordre bien prcis, pour que
les termes adjacents soient placs dans des cases connexes : entre deux cases
voisines, il n'y a qu'une seule variable qui change de valeur.

est dirent de celui utilis pour les tables de vrit.

Attention, cet ordre

Enn, il faut considrer que la table est situe sur un cylindre : la colonne
la plus droite et la colonne la plus gauche sont voisines. La colonne la plus

a.b et la colonne la plus droite a.b : entre les deux, seule la


b change de valeur. C'est la mme chose entre la premire et la dernire

gauche reprsente
variable
ligne.

80

Remplissage de la table de Karnaugh


Dans chacune des cases on crit la valeur de la fonction, obtenue par la
table de vrit. On fait une transposition de la table de vrit vers la table de

f (a, b, c, d)

Karnaugh. Prenons comme exemple la fonction

dcrite par la table

de vrit suivante :
a

f(a, b, c, d)

F
F
F
F
F
F
F
F
V
V
V
V
V
V
V
V

F
F
F
F
V
V
V
V
F
F
F
F
V
V
V
V

F
F
V
V
F
F
V
V
F
F
V
V
F
F
V
V

F
V
F
V
F
V
F
V
F
V
F
V
F
V
F
V

V
V
F
V
F
F
V
V
V
F
F
V
F
F
V
V

De la table de vrit, nous pouvons extraire une expression algbrique de la


fonction

f (a, b, c, d) = a.b.c.d+a.b.c.d+a.b.c.d+a.b.c.d+a.b.c.d+a.b.c.d+a.b.c.d+a.b.c.d+a.b.c.d
L'expression algbrique avant simplication utilise huit
sept

Et.

Ou,

seize

Non

et vingt

On peut transcrire la table de vrit dans la table de Karnaugh, ce qui donne


la table remplie suivante :

cd\ab
FF
FV
VV
VF

FF
V
V
V

FV

VV

V
V

V
V

VF
V
V

Nous pourrions bien sur, partir de cette table traduire chaque case par un
terme qui rende compte de la valeur des quatre variables pour cette case : nous
retomberions alors sur l'quation non simplie dja vue. On peut aussi utiliser
le fait qu'entre des cases voisines, il n'y a qu'une seule variable qui change de
valeur.

81

Groupement
V,

Quand deux cases voisines contiennent toutes les deux la valeur

cela

signie qu'elle est vraie, quelle que soit la valeur de la variable qui change de
valeur de vrit entre les deux cases.
Les deux premires cases de la colonne de gauche contiennent toutes les deux

V.

Elles correspondent l'expression

a.b.c.d

pour l'une et l'expression

a.b.c.d.

pour l'autre. On peut les prendre en compte toutes les deux avec l'expression

a.b.c,

la valeur de

n'est pas utile. Sous une forme algbrique, on peut voir ceci

comme la factorisation :

a.b.c.d + a.b.c.d

= a.b.c.(d + d)
= a.b.c.V
= a.b.c

mais nous n'avons pas eu besoin de deviner le terme par lequel il convenait
de factoriser (ce n'est pas toujours aussi facile que dans cet exemple) : c'est la
disposition des cases dans la table qui nous l'a indiqu.
Regardons maintenant la troisime ligne, dont toutes les cases contiennent

: cela signie qu'on peut couvrir ces quatre cas avec l'expression

tenir compte des valeurs de

ni de

c.d,

sans

b.

Il nous reste trois cas o la fonction est vraie : les deux cas de la ligne du
bas pourraient se traduire par

b.c.d

mais on peut faire mieux : en regroupant

ces deux cas avec ceux de la ligne prcdente, on voit qu'en ralit la valeur de

est sans importance et qu'on peut couvrir ces quatre cas avec l'expression plus
simple

c.b.

Le fait que les deux cases avec lesquelles nous les avons regroup

V + V = V . D'un
c.d + b.c.d = c.d + b.c.

taient dja couvertes n'est pas important, puisque


vue algbrique, nous avons utilis le fait que

point de

De la mme manire, le dernier cas non couvert, sur la droite de la deuxime


ligne peut se regrouper avec celui du dessous
correspond

et ceux de la premire colonne : il

b.d.

L'expression nale simplie de la fonction est donc :

f (a, b, c, d) = a.b.c + c.d + b.c + b.d


Si nous n'avons pas fait d'erreurs lors du calcul des regroupements, nous avons
la certitude qu'il s'agit de l'quation la plus simple de la fonction sous forme de
mintermes.

Extensions des tables de Karnaugh


Il existe des variantes de la mthode simple d'utilisation des tables de Karnaugh que nous avons prsente ici. La plus importante est est celle des situations

indirentes : certains cas de la fonction logique peuvent tre sans intrt

pour nous : le dispositif que nous construisons fonctionnera de la mme manire


que la fonction soit vraie ou fausse dans ce cas.

82

Quand on a des cas indirents, on les note avec des points d'interrogation
dans la table de Karnaugh. Quand on procde aux groupements, on peut utiliser
ces cases si cela permet de faire de plus grands groupes avec les les cases qui
contiennent vrai mais on n'est pas oblig de les recouvrir.
Il existe une variante des tables de Karnaugh pour les fonctions 5 ou 6
variables et on peut traduire certaines dispositions de cases par des

Ou exclusif

mais nous ne l'utiliserons pas dans le cours.

Rsum de la faon de simplier une expression logique quatre


variables avec une table de Karnaugh
On commence par remplir la table Karnaugh avec les valeurs de vrit, puis
on recherche les plus grands rectangles ou carrs qui ne contiennent que des

il vont se traduire par des termes. Plus le rectangle est grand et plus le terme
sera simple. Quant on aura traduit tous les
dit qu'on les a

de la table dans des termes (on

couverts), on peut s'arrter ; sinon il faut continuer.

La table peut tre remplie de V comme dans l'exemple suivant :

cd\ab
FF
FV
VV
VF

FF
V
V
V
V

FV
V
V
V
V

VV
V
V
V
V

VF
V
V
V
V

Dans ce cas, quelle que soit la valeur des variables, la fonction vaut vrai. On
peut l'crire

f (a, b, c, d) = V .

On a traduit tous les

de la table par le terme,

on peut donc s'arrter.


On cherche ensuite les rectangles

42

compltement remplis de

V.

Il se

traduisent par des termes composs d'une seule variable. Par exemple

correspond au terme

correspond au terme

cd\ab
FF
FV
VV
VF

FF

FV
V
V
V
V

VV
V
V
V
V

VF

cd\ab
FF
FV
VV
VF

FF
V

FV
V

VV
V

VF
V

On a intrt utiliser des

de la table plusieurs fois

quand cela permet d'agrandir des rectangles. Ainsi dans la table

83

cd\ab
FF
FV
VV
VF
on a les

deux

la fonction

FF
V

FV
V
V
V
V

VV
V
V
V
V

VF
V

rectangles des deux exemples prcdents ; elle correspond donc

f (a, b, c, d) = b + d

Pour les termes qu'on a pas encore couverts, on essaye de les placer dans des
rectangles

41

ou des carrs

2 2;

ils vont se traduire par des termes avec

deux variables. Ainsi

correspond

correspond

correspond

cd\ab
FF
FV
VV
VF

FF

FV

VV

VF

cd\ab
FF
FV
VV
VF

FF
V
V

FV
V
V

VV

VF

cd\ab
FF
FV
VV
VF

FF

FV

VV

VF

V
V

V
V

c.d

a.c.

b.d. De nouveau, il faut utiliser tous les V

qui permettent d'agran-

dir le rectangle, mme s'ils sont dja couverts. Ainsi

cd\ab
FF
FV
VV
VF
contient les deux carrs

22

FF
V
V

FV
V
V
V

VV

VF

V
V

des exemples prcdents et correspond donc

a.c + b.d

84

2 3 par une
2 2 qui se recouvrent

Attention, on ne peut pas traduire directement un rectangle


seule expression ; il faut le considrer comme deux carrs
partiellement. Ainsi la table

cd\ab
FF
FV
VV
VF
contient deux carrs

FF
V
V

FV
V
V

VV
V
V

VF

22 qui se recouvrent ; elle va se traduire par f (a, b, c, d) =

a.c + b.c.
Pour les

qui restent, on essaye de les placer dans des rectangles

jours en utilisant plusieurs fois des

2 1, tou-

dj couverts si cela permet de construire

un rectangle. Ils vont tre traduits par des termes 3 variables. Ainsi

cd\ab
FF
FV
VV
VF
correspond

VV

VF

FF

FV

VV

VF

FF

FV

VV

f (a, b, c, d) = b.c.d
cd\ab
FF
FV
VV
VF

correspond

FV

f (a, b, c, d) = a.c.d
cd\ab
FF
FV
VV
VF

correspond

FF

VF

f (a, b, c, d) = a.c.d + b.c.d

Finalement les

compltement isols sont traduits par un terme quatre

variables.

8.2.3 Simplication des expressions logiques en pratique


En pratique, la simplication des expressions logiques est un problme dicile traiter mais dans lequel les ordinateurs sont en gnral bien plus ecaces
que nous. Des applications logicielles existent pour faire ce travail.

85

Il faut cependant acqurir une certaine familiarit avec les simplications


algbriques ordinaires. Les tables de Karnaugh, prsentent de plus l'avantage de
faire de bonnes questions d'examen.

8.3

Rsum

A partir des valeurs

Vrai

et

Faux,

on peut construire des fonctions logiques

de variables boolennes. Ces expressions peuvent se manipuler sous forme algbrique ou sous forme de tables de vrit. Pour chaque fonction logique, on peut
construire un circuit lectronique quivalent.
On peut simplier les expressions logiques avec des manipulations algbriques ou des tables de Karnaugh.

8.4

Exercice

Exercice 8.1 : Soit f (x, y, z) = x + y.z . Calculer f

avec des manipulations

algbriques.

Exercice 8.2 : Vriez le rsultat de l'exercice prcdent en construisant les


tables de vrit de

Exercice
fonction

et de

(avec toutes les colonnes intermdiaires).

8.3 : (Exercice type ; long) Construire la table de vrit de la

f (a, b, c, d) = a.b + a.b + c.d + c.d

Exercice 8.4 : Dterminer une quation de la fonction dcrite par la table


de vrit suivante.
a

Simplier algbriquement cette fonction.

Exercice

8.5 : ( faire) A l'aide d'une table de vrit, regarder si

est associatif (c'est dire si

Non-Et

a.b.c = a.b.c

Exercice 8.6 : ( faire) On montre que toutes les fonctions logiques peuvent
Non-Et
Non-Et :

s'crire seulement avec des


peuvent se raliser des

en notant que les trois fonctions de base

86

x
a.b
a+b

= x.x
= a.b.a.b
= a.a.b.b

Dmontrer ces trois galits avec des tables de verits.

Exercice

8.7 : Trouver les trois quations qui permettent de prouver que

toutes les fonctions logiques peuvent s'crire en utilisant seulement des

Non-Ou.

(On peut s'inspirer des quations de l'exercice prcdent.)

Exercice

8.8 : En fait, une seule quation aurait su dans l'exercice pr-

cdent, pour montrer qu'on pouvait calculer un


des

Non-Ou. Laquelle ?

Non-Et

en utilisant seulement

Exercice 8.9 : Imaginons que pour notre langage, nous utilisions l'algbre de
Boole. Que repondrait alors la sage femme lorsque le nouveau pre lui demande :
Alors, c'est un garon

ou une lle ?.

Exercice 8.10 : Dans quel cas la rponse de l'inrmire serait elle dirente
si le pre lui demandait :C'est un garon

Exercice

ou exclusif une lle ?.

8.11 : Simplier algbriquement les expressions algbriques de

gauche, jusqu' obtenir l'expression de droite.


A simplier

Forme simple

(a)

(p + r).(p + s).(q + r).(q + s)


(b) (a.c + b.c).(a + c).b
(c) a.b.c + a.b.c + a.b.c
(d) b.d + c.d + c.d + a.b.c.d + a.b.c

p.q + r.s
b.c
a.(b + c)
b.c + d

(a + b).(a + b)
(x.y + z).(x + y).z
(g) a + a.b.c + a.b.c + a.b + a.d + a.d
(h) (p.q + p.r)

b
(x + y).z
a+b
p.q + p.r + q.r

(e)
(f )

(i)

Exercice

(p + q.((r + s)))

p.(q + r + s)

8.12 : Utiliser les tables de Karnaugh suivantes pour obtenir la

forme algbrique simplie de la fonction qu'elles dcrivent :


(a)

cd\ab
FF
FV
VV
VF

FF
V
V
V
V

FV
V

VV
V

(b)

87

VF
V
V
V
V

cd\ab
FF
FV
VV
VF

FF

cd\ab
FF
FV
VV
VF

FF

cd\ab
FF
FV
VV
VF

FF
V

FV
V

VV
V

V
V

VF
V
V

FV
V
V
V
V

VV
V
V
V
V

VF

FV

VV

VF
V

V
V

V
V

(c)

V
V

(d)

V
V

88

Chapitre 9
Des dispositifs pour calculer

Dans ce chapitre, nous examinons comment combiner les signaux logiques


pour reprsenter des informations et eectuer des calculs. Ce dont on a besoin,
c'est de quelque chose susceptible de

controler un signal.

Nous prsentons d'abord les relais qui prsentent l'avantage de la simplicit,


puis nous nous tendons un peu plus longuement sur les transistors, qu'on utilise
dans les ordinateurs actuels.

9.1

Les relais

Les relais sont contruits base d'

lectro-aimants. Un lectro-aimant est sim-

plement un l qui entoure un coeur mtallique ; quand il n'y a pas de courant qui
passe dans le l, le coeur mtallique n'est pas magntique ; en revanche, quand
il y a du courant qui traverse le l, le coeur mtallique se comporte comme un
aimant. L'lectro-aimant est utilis pour dplacer une lame mtallique mobile de
manire controler le passage du courant dans un autre circuit, comme suggr
dans les schmas de la gure 9.1.
Avec des relais, on peut construire des circuits qui eectuent les calculs de la
logique boolenne, si on utilise la circulation du courant pour encoder les valeurs

vrai et faux ; ainsi le circuit de la gure 9.1 se comporte comme un Non : s'il y a
du courant entre
en a pas entre

et

b,

et

b,

alors il circule entre

X et Y ; inversement, s'il n'y


Y . Un autre exemple de circuit

alors il n'y en a pas entre

et

est celui de la gure 9.2 qui utilise deux relais.


Considrons la gure 9.2 et dcidons de coder
circule et

Faux

x1

et

ni entre

b1

entre

qui calcule

Vrai

avec du courant qui

avec du courant qui ne circule pas. Pour que le courant circule

x2 , (et donc que x =Vrai), il faut qu'il n'en circule ni entre a1 et a2 ,


et b2 (et donc que a =Faux et b =Faux. On a donc alors un circuit
x = ab.

Les relais ont t utiliss pour construire des calculateurs entre 1920 et 1940

89

Figure 9.1  Quand il n'y a pas de courant entre

Y)

est en contact avec la lame xe (relie

a et b,
X ) et le

la lame mobile (relie


courant peut circuler

(dans le relai de gauche). En revanche, quand le courant circule entre

et

l'lectroaimant attire la lame mobile et le courant ne peut pas passer entre


et

b,
X

(dans le relai de droite).

x1

x2

a1
a2
b1
b2

Figure 9.2  S'il y a du courant qui circule entre

a1

et

a2

ou entre

b1

et

b2

(ou

les deux la fois), alors il y a un relai en position ouverte et le courant ne peut


pas circuler entre

x1

et

x2 .

90

Grille
Conducteur

Silicium semiconducteur

Conducteur

Figure 9.3  Une vision schmatique d'un transistor

mais des considrations lectriques et mcaniques limitent la vitesse de commutation entre les deux positions du relais (il faut un temps de l'ordre du dixime
ou du centime de seconde pour dplacer le bras mobile) ce qui ne permet pas de
calculer trs vite. On les utilise encore, notamment pour controler, partir d'un
circuit qui utilise des tensions basses (comme une unit de calcul), des circuits
qui utilisent des tensions plus fortes (comme un moteur).
A partir des annes 1940, on s'est mis utiliser pour la mme fonction des
lampes lectroniques qui jouent le mme rle que les relais mais n'ont pas de
partie mcanique et commutent beaucoup plus rapidement. Elles se composent
d'un lament qui met des lectrons (c'est la
(le

drain) ;

entre les deux, on intercale une

source) en direction d'un rcepteur


grille ; quand on met la grille sous

tension, elle cre un champs lectrique qui bloque le passage des lectrons entre
la source et le drain ; la grille joue ici le mme rle que l'lectro-aimant du relai.
Les inconvnients principaux des lampes, c'est qu'elles sont grosses, qu'elles
consomment beaucoup de courant et surtout qu'elles tombent en panne, comme
les lampes que nous utilisons pour nous clairer ; partir de la dcouverte du
transistor au milieu des annes 1950, on les a utilis la place des lampes.

9.2

Les transistors

Nous ne prsentons ici que les transistors qu'on trouve dans les circuits VLSI
et nous nous limitons la variante CMOS.

9.2.1 La structure d'un transistor


Le transistor utilise un matriau dit

semi-conducteur

: ce matriau est iso-

lant ou conducteur suivant qu'on lui applique ou pas une tension. Le principal
transistor utilis dans les ordinateurs est le transistor

MOSFET,

fond sur du

silicium.
On voit sur la gure 9.3 une vision schmatique de la structure d'un transistor : le courant pourra circuler ou pas entre

et

si le silicium semi-conducteur

est dans l'tat conducteur ou pas ; ce sera le cas selon qu'il y aura une tension
ou pas entre

et

B . Il se comporte donc comme un


AB , comme le relai de la gure

sous le contrle de

interrupteur reliant

comme un interrupteur ouvert, on dit que le transistor est


comme un interrupteur ferm, on dit qu'il est

91

9.1. Quand il se comporte

passant.

bloquant ; quand c'est

Figure 9.4  Une reprsentation schmatique des transistors

( gauche) et

( droite).

Vcc

Vdd
Figure 9.5  Un inverseur CMOS

9.2.2 Les transistors N et P


Il y a deux types de transistors :

et

comportent de faon inverse : un transistor

(comme

Ngatif

et

Positif)

qui se

sera passant quand il n'y aura

pas de tension sur la grille, alors qu'un transistor

le sera quand il y aura une

tension. On les reprsente couramment par les deux symboles de la gure 9.4.
Avec ces transistors

et

P,

on peut construire des fonctions de calcul en

technologie cmos. On utilise deux niveaux de tensions,

VCC

et

VDD

pour coder

les deux valeurs de la logique boolenne. Les autres niveaux de tensions sont
indtermins ; ils ne codent rien et on conoit les circuits de manire qu'ils ne
puissent pas apparatre. On parle alors d'lectronique

numrique ou digitale.

9.2.3 L'inverseur CMOS


On se sert, par exemple de la tension
pour

Faux.

VCC

pour reprsenter

Vrai et VDD
non avec

Nous pouvons raliser un circuit qui calcule la fonction

le dispositif de la gure 9.5. Quand il n'y a pas de tension en


Inversement, quand
est passant, si bien

92

a,

le transistor

VCC .
a est VCC , le transistor du haut est bloquant, celui du bas
que f est connect VDD .

du haut est passant et celui du bas est bloquant :

est donc connect

Vcc

a
f
Vdd
Figure 9.6  Un montage viter en CMOS.
Vdd

Vdd

b
b
a ET b
a OU b

Vcc
Vcc

Figure 9.7  Un

En pratique,

VCC

et et un ou raliss en CMOS.

sera reli l'alimentation et

VDD

la masse. Pour cette

raison, on vite de monter des circuits comme celui de la gure 9.6 : quand il y a
une tension en

a, le transistor est bloquant, la sortie f

est relie

est invers. En revanche, quand il n'y a pas de tension en


passant, le courant peut circuler librement entre

VCC

et

a,

VDD

Vdd

et le signal

le transistor est
et le circuit fond

(comme, dans une installation lectrique classique, quand on fait se toucher les
deux ls d'une prise lectrique).

9.2.4 Le ET et le OU en CMOS
Les fonctions

et et ou peuvent se raliser de la mme manire en combinant

des transistors N et P comme dans la gure 9.7. Vous pouvez vrier que les
circuits ont t conus avec soin pour que la sortie soit connecte soit
soit

VCC

VDD ,

suivant les tensions prsentes en entres. En revanche, quelle que

soient les valeurs de

et

b,

on n'a jamais de connexion entre

VCC

et

VDD .

Si

c'tait le cas, l aussi courant circulerait librement et le circuit fondrait.


Pour des fonctions plus complexes, on peut construire directement des circuits CMOS qui les calculent, ou bien on peut combiner les trois circuits que

93

nous venons de voir.

9.2.5 Ralisation des circuits


La plupart des transistors sont l'heure actuelle raliss dans des circuits
intgrs fonds sur le silicium. Le processus de fabrication commence par la
ralisation d'un cylindre de silicium cristallin trs pur qui est ensuite dcoup
en nes tranches (des

wafers) de quelques dizaines de centimtres de diamtre.

La tranche de silicium passe ensuite par une srie d'tapes de fabrication


de chaque couche : elle est recouverte de rsine photo-sensible qui durcit la
lumire ; la tranche est ensuite illumine dans certaines zones seulement l'aide
d'un masque. La rsine qui est reste l'ombre est lessive avec un solvant doux.
Le silicium qui n'est plus protg par la rsine est alors modi : soit il est oxyd
(l'oxyde de silicium est isolant), soit il est dop en le bombardant d'atomes qui
vont en modier les proprits et le rendre semi-conducteur, soit une couche de
mtal (conducteur) y est dpose. La rsine qui reste est alors retire avec un
solvant plus nergique et on recommence pour la couche suivante.
Finalement, la tranche est dcoupe en ds (des

dies

en anglais), sur lequel

sont xs des pattes et le tout est coul dans un boitier en plastique.
Les techniques de fabrication actuelles permettent de placer quelques millions de transistors dans un circuit intgr : on parle de circuits vlsi comme

Very Large Scale Integrated Circuit.

9.3

Exercices

Exercice 9.1 : Si on adopte le codage inverse de celui du texte, c'est dire


qu'on code

Vrai

avec le courant qui ne circule pas et

Faux

avec le courant qui

circule, quelle est la fonction calcule par le circuit de la gure 9.2

Exercice 9.2 : Comment construire avec des relais un circuit qui calcule un

OU ?

Exercice 9.3 : Dessiner un circuit CMOS qui calcule la fonction ou exclusif.


Exercice 9.4 : Combiner les circuits CMOS qui calculent un ou et un non

pour obtenir un circuit qui calcule un

Non-Ou

en utilisant 6 transistors. (Voir

aussi l'exercice suivant.)

Exercice 9.5 : Concevoir un circuit qui n'utilise que 4 transistors pour calculer la fonction

Exercice

Non-Ou. (Voir aussi l'exercice prcdent.)

9.6 : Que calcule le circuit CMOS de l'exercice prcdent si on

adopte la convention que

Vrai ?

VCC

code la valeur logique

94

Faux

et

VDD

la valeur

Chapitre 10
Portes logiques et circuits
combinatoires

Ce chapitre prsente les circuits

combinatoires,

dont la sortie un moment

donn ne dpend que des entres. On utilise ces circuits notamment pour faire
des calculs mais on ne peut pas les utiliser pour fabriquer des mmoires.

10.1

Codage des chires

On utilise les fonctions logiques pour coder les chires 0 et 1 que manipulent
nos ordinateurs. Ceci va nous permettre de concevoir des circuits pour eectuer
des calculs.
Notons qu'il existe plusieurs niveaux de codages dirents : la base, il y a
des transistors qui sont passant ou bloquant suivant des niveaux de tensions
et

VDD ;

avec ces niveaux de tensions, on peut coder les valeurs

Vrai

et

VCC

Faux

deux codages distincts sont possibles. De mme, dans les circuits on peut utiliser
les valeurs logiques

Vrai et Faux pour coder les chires 0 et 1. Dans les langages

de programmation de plus haut niveau, on a une autre reprsentation des valeurs


logiques

Vrai et Faux, partir de valeurs reprsentes dans la mmoire.

On suppose souvent, comme nous le ferons ici que l'absence de tension est
utilise pour reprsenter le

0.

Faux

De mme nous utiliserons

le chire

1.

VCC

de la logique, qui sert reprsenter le chire


pour reprsenter le

Vrai de la logique et pour

Les autres codages sont aussi possibles et pratiques dans certaines

occasions.

95

NON

OU

ET

Figure 10.1  Les circuits de base

10.2

Un exemple : conception d'un additionneur

Nous allons montrer les tapes de la conception d'un circuit destin eectuer des additions.

10.2.1 Les circuits de base


Dans la gure 10.1, on voit les trois circuits que nous utilisons comme briques
de base : gauche, les traits indiquent les

entres du circuit ; droite, le circuit

produit une sortie.


Nous utilisons la convention anglo-saxonne qui fait dessiner les circuits qui
calculent des fonctions direntes avec des formes spciques. Le

Non se dessine

avec un petit rond blanc ; le triangle qui le prcde rappelle que l'inverseur
amplie galement le signal. Le

Et et le Ou que nous montrons ont deux entres

mais nous pouvons utiliser les variantes avec un plus grand nombre d'entres.

10.2.2 Equivalence entre fonction et circuit


tant donn une fonction boolenne quelconque, on peut facilement concevoir un circuit quivalent qui calcule cette fonction. Inversement, tant donn
un circuit combinatoire, on peut trouver la fonction quivalente.
Pour concevoir le circuit qui calcule une fonction, on place les variables de la
fonction comme entres du circuit, puis on construit tape par tape les circuits
qui traduisent les sous-expressions de la fonction. Ainsi, la fonction de trois
variables

f (a, b, c) = a.b.c + a.b.c + a.b.c


se traduit par le circuit de la gure 10.2 Les points noirs indiquent o les ls ne
se croisent pas mais sont en contact.
Inversement, on peut extraire d'un circuit combinatoire la fonction boolenne
quivalente. Il sut de noter, la sortie de chaque circuit de base, l'expression
qui est calcule en fonction de ses entres, en continuant jusqu'aux sorties du
circuit.

96

1
0
0
1

1
0
0
1

1
0
0
1

1
0
0
1

1
0
0
1

1
0
0
1
Figure 10.2  Le circuit quivalent la fonction

f (a, b, c) = a.b.c + a.b.c + a.b.c.

10.2.3 Le demi-additionneur
Le circuit de la gure 10.3, reprsente ce qu'on appelle un
il possde deux entres,

et

demi-additionneur :

et calcule le rsultat de l'addition des deux

nombres reprsents par ces deux chires. Rappelons la table de l'addition dans
la base 2 :
a

a + b

10

Un problme, simple rsoudre, vient de la dernire ligne dans cette table d'addition : il faut deux chires pour reprsenter la sortie de notre demi-additionneur :
l'un sera le chire de droite, que nous noterons
noterons

r.

et l'autre la retenue que nous

Nous pouvons complter notre table avec ces deux valeurs :

a+b

10

En utilisant les mthodes vues au chapitre prcdent, on constate aisment que

r = a.b

et que

s = a.b + a.b.

C'est ce que calcule notre circuit.

97

a
a.b

1
0

a.b+a.b

1
0
a.b
b

1
0

1
0
0
1

1
0
a.b
retenue

1/2 add

+
r

Figure 10.3  Le circuit

demi-additionneur,

additions.

98

brique de base pour eectuer des

1/2 add r
s

r out
1/2 add r
s

s=a+b+r

add

Figure 10.4  Le circuit

additionneur complet,

qui additionne trois nombres

binaires un chire.

Une fois le circuit construit, nous pouvons le considrer comme une brique
supplmentaire qu'on peut r-utiliser dans des constructions plus complexes.
Dsormais, nous reprsenterons le demi-additionneur comme indiqu en bas de
la gure : un rectangle qui porte l'tiquette

1/2 add,

avec ses deux entres et

ses deux sorties.

10.2.4 L'additionneur 1 bit


Avec un demi additionneur, on peut avoir le sentiment que nous n'avons pas
beaucoup avanc : partir de deux entres, nous avons calcul deux sorties. Or
pour faire l'addition de deux nombres nous avons besoin d'additionner trois bits
dans chaque position : le bit de chacun des nombres mais aussi la retenue de la
colonne prcdente. Pour cette raison, considrons une table d'addition de trois
valeurs :

a+b+c

10

10

10

11

Une faon simple de construire un tel circuit consiste utiliser deux demiadditionneurs (d'o leur nom). Si le premier demi-additionneur produit une

99

0
+

s0

add

a0

r
b0

s1

add

a1

r
b1

s2

add

a2

r
b2

s3

s4

add

a3
b3

Figure 10.5  Un circuit pour additionner deux nombres de quatre chires, en


utilisant quatre additionneurs complets.

retenue, alors l'entre du second qui correspond la somme sera 0 et ce


second demi-additionneur ne produira pas de retenue. On peut donc faire un
simple

Ou entre les deux retenues qui sortent des deux demi-additionneurs pour

obtenir la retenue de l'addition de trois valeurs. Nous prsentons un tel circuit


dans la gure 10.4 ; il calcule la somme de ses entres. C'est un additionneur

complet que nous pouvons dsormais utiliser comme brique dans la construction
de circuits plus complexes.

10.2.5 L'additionneur 4 bits


Pour additionner des nombres reprsents sur plusieurs chires, on peut
construire simplement un circuit avec autant d'additionneurs complets qu'il y
a de chires. C'est ce que fait le circuit de la gure 10.5. Si on prsente sur les
entres

a3 a2 a1 a0

et

b3 b2 b1 b0

deux nombres binaires sur quatre chires, il produit

une somme (sur 5 bits, cause de la retenue)

s4 s3 s2 s1 s0 .

Pour construire ce circuit, nous nous sommes contents de connecter la retenue de l'additionneur de chaque paire de chires l'entre de l'additionneur
suivant. Nous allons maintenant utiliser ce circuit comme une nouvelle brique

100

dans nos constructions, en le reprsentant comme sur la droite de la gure, avec


un rectangle tiquett avec

add.

Sur le mme modle, on peut faire des additionneurs pour des nombres sur
n'importe quel nombre de chires binaires : il sut de multiplier le nombre
d'additionneurs 1 bit.
Il existe d'autres circuits plus rapides pour faire des additions mais celui-ci
prsente l'avantage de la simplicit.
Vous vous demandez pourquoi nous avons utilis, pour additionner les bits

a0

et

b0

un additionneur complet, alors qu'un demi-additionneur aurait su ?

La rponse se trouve dans la section suivante.

10.3

Le soustracteur 4 bits

Comment faire un circuit soustracteur ? Puisque nos nombres sont reprsents en complment deux, il sut de calculer le complment deux du nombre
soustraire puis d'utiliser un additionneur pour eectuer le calcul.
Pour calculer le complment 2, rappelons qu'on remplace chaque
et rciproquement, puis qu'on ajoute

1.

par

Cet ajout nal est gnant parce que

la retenue peut se propager dans tout le nombre et il faudrait donc une seconde ligne (qui pourrait se faire avec des demi-additionneurs seulement) pour
propager cette retenue.

c1 (x) le complment
c1 (x) + 1. Donc, on a :

Cependant, il existe un raccourci. Si on note


nombre

x,

alors son complment 2 vaut

1 d'un

a b = a + (c1 (b) + 1)
Or l'addition est associative, donc on peut aussi crire

a b = a + c1 (b) + 1
Dans l'additionneur 4 bits que nous venons de construire, nous avons inject

comme une des trois entres de l'additionneur complet pour les bits de poids
faible. Nous pouvons aussi y injecter

quand nous souhaitons faire une sous-

traction.
Cela nous permet de raliser un circuit soustracteur sur le mme modle que
l'additionneur : il sut d'inverser chacun des bits du nombre soustraire et de
placer un

1 dans l'entre de l'additionneur pour les bits de poids faible. C'est ce

que nous faisons dans la gure 10.6. Cette gure est comparer avec la gure
10.5.

101

1
+
a0

s0

add
r

b0

s1

+
a1

add
r

b1

s2

+
a2

add
r

b2

a3

s3

s4

add

b3
Figure 10.6  Un circuit
ajoutant

b,

soustracteur

: en inversant tous les bits de

et en

au bits de poids faible, on additionne en fait le complment 2 de

ce qui revient soustraire

b.

102

1
0
0
1
11
00

xc + xc

contr
in
Figure 10.7  Un circuit

out

inv?

inverseur ? qui inverse ou pas son entre x suivant la

valeur de

c.

10.4

L'additionneursoustracteur 4 bits

Nous considrons maintennant la ralisation d'un circuit qui permette soit


d'additionner soit de soustraire, en fonction d'un signal d'entre supplmentaire
qui indique l'opration eectuer. Pour cela, nous commenons par construire
un

inverseur conditionnel.

Le circuit aura une entre de contrle

vaudra 0, la sortie sera gale


sortie sera gale

x.

x;

en revanche, quand le controle

: quand

vaudra 1, la

La table de vrit de notre inverseur sera donc :

Nous prsentons ce circuit sur la gure 10.7. Comme d'habitude, nous avons
plac en bas un schma qui va nous permettre de rutliser ce circuit dans avoir
besoin d'en prciser les dtails. Soulignons que nous avons dja rencontr ce
circuit comme une partie du demi-additionneur.

103

+ ou

1
0
0
1

1
0
in

contr
inv?

out

add

s
r

s0

in

contr
inv?

out

add

s
r

s1

b2
a2

in

contr
inv?

out

add

s
r

s2

b3
a3

in

contr
inv?

out

add

s
r

s3
s4

b0
a0

b1
a1

11
00
00
11
11
00

add/sub
a
b

additionneur
soustracteur

resultat
retenue

Figure 10.8  Un circuit aditionneur/soustracteur pour mots de quatre bits.

104

11
00
00
11

a
Mux

ac | bc

a
ac | bc

b
Figure 10.9  Un circuit multiplexeur lmentaire

Pour obtenir un circuit qui permet de faire la fois les additions ou les
soustractions, nous remplaons les inverseurs du soustracteur de la gure 10.6
par le circuit

inverseur conditionnel que nous venons de concevoir, comme dans

la gure 10.8 : si le signal de contrle est zro, l'inverseur conditionnel ne


modie pas le signal et nous avons un additionneur comme dans la gure 10.5 ;
si le signal de contrle est

1,

les inverseurs conditionnels inversent les signaux

qu'ils reoivent en entre et le circuit fonctionne comme le soustracteur de la


gure 10.6.
Nous avons montr en dessous une version sans dtails de notre circuit qu'on
peut utiliser comme lment de construction de circuits plus complexes. Pour
simplier le schma, plutt que de dessiner tous les ls pour

a, b

et

s,

on ne

dessine qu'un trait et on indique le nombre de ls reprsents par ce trait. Nous
avons nomm le signal de contrle add/sub pour indiquer que la valeur
ce l provoque une addition et la valeur

sur

une soustraction : c'est un usage

courant pour nommer les signaux d'une faon qui permette de se souvenir de
leur fonction.

10.5

Le multiplexeur

Nous allons maintenant construire un circuit qui va nous permettre de choisir, entre plusieurs signaux en entre, lequel nous souhaitons obtenir en sortie.
On appelle ces circuits des

multiplexeurs.

105

La gure 10.9 montre un multiplexeur lmentaire qui permet de choisir

a et b sera prsent en sortie, suivant la valeur du signal


c. Le circuit calcule s tel que s = a.c + b.c ; donc si c = 0, on a
s = a.1 + b.0 = a + 0 = a, alors que si c = 1 on a s = a.0 + b.1 = 0 + b = b. On

lequel des signaux


de contrle

peut donc considrer ce circuit comme un aiguillage qui connecte la sortie soit

a,

soit

b.

A l'aide du circuit multiplexeur lmentaire, on peut construire facilement


un circuit multiplexeur qui va permettre de choisir le signal prsenter en
sortie parmi un nombre quelconque de signaux. La gure 10.10 prsente un tel
multiplexeur pour huit entres : il faut trois signaux de contrle dans ce cas.
Comme on le voit sur la gure, on utilise le premier signal de contrle

c0

pour liminer la moiti des signaux entrants : il ne reste que quatre signaux
parmi les huit de dpart ; le deuxime signal de contrle
et le dernier contrle

c2

c1

en limine encore 2

permet de choisir le signal qui sera prsent en sortie.

Une autre faon de considrer la chose, c'est que

c2 c1 c0

reprsentent un

nombre binaire sur trois chires, compris entre 0 et 7, qui contient le numro
du signal prsent en sortie. Cette vision synthtique correspond au schma de
droite, dans lequel le multiplexeur est reprsent avec deux traits qui entrent et
un trait qui sort : sur chaque trait est indiqu le nombre de ls reprsents sur
ce trait.
En bas droite de la gure, on a une version plus gnrale : avec
de contrle, on peut choisir un signal parmi

signaux

2n .

Il existe un circuit du mme genre que le multiplexeur, qu'on appelle un

dcodeur. Voir les exercices.

10.6

L'unit de calcul

Nous avons maintenant tous les lments pour construire une unit arithmtique et logique : la gure 10.11 ne contient que des lments que nous connaissons dja.
Cette ual est susceptible d'eectuer 5 oprations : trois oprations logiques

Et, Ou, Non) et deux oprations arithmtiques : addition et soustraction. Elle

a et b et une retenue entrante, note rin . Le signal est


prsent en entre de circuits qui calculent le rsultat possible de toutes les

possde deux entres,

oprations logiques et celui de l'addition ou de la soustraction suivant l'tat du


bit de poids fort du contrle. Ensuite un multiplexeur permet de choisir, parmi
les quatre valeurs calcules, laquelle sera prsente en sortie comme rsultat.
Les codes oprations seront donc :

106

c0

c1

c2

11
00
a0

Mux

a1

11
00
Mux

11
00
a2

Mux

a3

11
00
00
11

Mux

a4

out

Mux

a5

Mux
a6

Mux

a7
c

c
3

in

Mux
1 parmi 8

out

in
2^n

Mux
1 parmi 2^n

Figure 10.10  Un circuit multiplexeur 1 parmi 8.

107

out

r in

operation

1
0
0
1

11
00
00
11
00
11
00
11

additionneur
soustracteur

mux
1 parmi 4

11
00
00
11
00
11
00
11

r out
3
r in oper
ALU
1 bit r
r out

Figure 10.11  Une unit de calcul 1 bit

108

resultat

code
000
001
010
011
101

opration

Non a
a + b
a OU b
a ET b
a - b

Une ual 1 bit n'est pas trs utile mais on peut combiner des units de
traitement d'un bit pour traiter le nombre de bits que l'on veut. La gure 10.12
montre une unit de calcul pour des mots de quatre bits, contruite avec quatre
units de calcul d'un bit. La partie de droite de la gure contient le symbole
qu'on emploie usuellement pour reprsenter une ual qui traite des nombres de

bits.

10.7

Rsum

Aux expressions logiques, on peut faire correspondre des circuits qu'on peut
raliser avec des transistors. Quand les circuits ne contiennent pas de boucles,
on peut aussi faire correspondre une expression logique chaque circuit. Des
circuits intressants sont l'additionneur, le multiplexeur, le dcodeur. En les
utilisant, on peut contruire une unit arithmtique et logique.

10.8

Exercices

Exercice

10.1 : Concevoir un circuit trois entres et une sortie, dont la

sortie vaudra 1 si une et une seule de ses entres est 1.

Exercice 10.2 : Concevoir un circuit qui reoit un nombre cod sur quatre
bits et renvoie

si ce nombre est suprieur ou gal dix.

Exercice 10.3 : Concevoir un circuit qui reoit un nombre cod sur quatre
bits et renvoie

si ce nombre est divisible par 3.

Exercice 10.4 : (Amusant) Concevoir un circuit, ralis seulement avec des

Ou, Et

et

Non,

qui ralise un

Ou exclusif

sans qu'aucun l ne se croise (et

bien sur avec les entres et les sorties qui arrivent de l'extrieur et ne sont pas
parachutes au milieu du circuit).

Exercice 10.5 : (Amusant et dicile) Concevoir un circuit trois entres a,


b

et

c,

Non,

dont les trois

10.6 : Chaque fois qu'un signal traverse une porte

Non, Et, Ou,

qui utilise des

sorties valent

Exercice

a, b

et

Ou,

des

Et

et seulement deux circuits

c.

les transistors qui le composent ont besoin d'un peu de temps pour atteindre
un tat stable. Supposons que ce temps

est constant, quelle que soit la porte

lmentaire. Calculer le temps ncessaire en fonction de

109

t pour stabiliser la sortie

operation

a0
b0

a1
b1

r in oper
ALU
1 bit r
r out

r in oper
ALU
1 bit r
r out

r0

op
r1

3
n
a
n

a2
b2

a3
b3

r in oper
ALU
1 bit r
r out

r
r2

r in oper
ALU
1 bit r
r out

r3

n
b

Figure 10.12  Une unit de calcul 4 bits

110

d'un demi-additionneur, d'un additionneur complet 1 bit, d'un additionneur


complet 8 bits. Refaire la mme question en changeant les entres

et

de

l'additionneur.

Exercice 10.7 : Dessiner un multiplexeur 1 parmi 5.


Exercice 10.8 : Combien faut-il de multiplexeurs lmentaires 1 parmi 2
pour contruire un multiplexeur

1 parmi n

quand

n'est pas une puissance de

deux ?

Exercice 10.9 : Dessiner un multiplexeur 1 parmi 64 (heureusement qu'on

1 parmi 8 ; on peut mme dnir des multiplexeurs


1 parmi 16 et 1 parmi 32 pour simplier le travail)
Exercice 10.10 : ( faire) Un circuit dcodeur lmentaire possde une entre

peut utiliser le multiplexeur

et deux sorties

s0

et

s1

: quand

a = 0, s0 = 1

et

s1 = 0.

Quand

a=1

c'est le

contraire. : dessiner un circuit dcodeur.

Exercice

10.11 : ( faire) Un dcodeur gnral possde

sorties ; si les entres codent le nombre


0, sauf la sortie

sa

entres et

2n

en binaire, alors toutes les sorties sont

qui est 1. Dessiner le circuit d'un dcodeur quatre

sorties. Dessiner le circuit d'un dcodeur 3 entres.

Exercice 10.12 : A partir du schma de l'unit de calcul de la gure 10.11,


dterminer ce qui se produit quand on envoie les codes opration

100, 110

et

111.

Exercice

10.13 : ( ne pas faire) Modier le schma de l'alu 1 bit pour

permettre les dcalages de mots. On peut le faire, grace aux retenues entrante
et sortante, sans modier le schma de l'alu 4 bits et en n'utilisant que deux
multiplexeurs

1 parmi 2.

111

Chapitre 11
Circuits squentiels

Dans le chapitre prcdent, nous avons tudi des circuits qui permettent
de calculer des fonctions logiques : les valeurs en sortie ne dpendent que des
valeurs prsentes en entre l'instant prsent.
Pour fabriquer des mmoires, il faut des circuits dirents, dans lesquels il
y a des boucles : l'tat du circuit va alors dpendre des valeurs qui s'y sont
trouves auparavant.

11.1

Les boucles d'inverseurs

Nous allons commencer par examiner deux circuits lmentaires dans lesquels
il n'y a pas d'entres et qui ne sont raliss qu'avec des boucles d'inverseurs.

La premire boucle reprsente sur la gure 11.1 est instable : s'il y a


en entre de l'inverseur il va y avoir un

en sortie. Mais comme la sortie est

renvoye en entre elle va aussitot changer de valeur pour passer 1 et ainsi de


suite. Le circuit est instable ; la valeur de la sortie

change sans arrt.

Figure 11.1  Un inverseur boucl est instable ; la valeur de

112

q change sans arrt.

q
a

Figure 11.2  Deux inverseurs boucls sont stables.

Figure 11.3  Le circuit de la gure 11.2 dessin autrement.

Le circuit reprsent dans la gure 11.2 est stable : quelle que soit la valeur
de

a,

la sortie de l'inverseur du haut vaut

a = a.
produit 1

et donc la sortie de l'inverseur du

bas vaut

Le point important est que nous ignorons la valeur de

circuit

ou

0,

suivant la valeur qui s'est trouve dans

: le

au dpart.

L'usage veut qu'on reprsente les circuits dans le mme sens, comme sur
la gure 11.3, qui contient les mmes lments que la gure 11.2 : ici les deux
inverseurs ont leur entre sur la gauche et leur sortie sur la droite.
L'inconvnient d'un tel circuit est que nous ne pouvons pas modier la valeur
mmorise. Nous allons rsoudre ce problme dans la section suivante.

11.2

La bascule RS

Si on remplace les inverseurs des boucles prcdentes par des circuits Non-Et
Non-Ou, nous pouvons modier la valeur mmorise dans la boucle. Rappelons tout d'abord la table de vrit du Non-Ou vue au chapitre prcdent :
ou

a+b

113

Avec des circuits

Non-Ou,

on a la classique bascule RS, prsente dans la

gure 11.4. Quand les deux signaux


les signaux
de

et

R et S sont 0, les circuits Non-Ou inversent

comme le faisaient les inverseurs de la gure 11.3 et la valeur

reste stable.

a
S
Figure 11.4  Une bascule RS avec deux

Non-Et. Quand les valeurs de R et S

sont xes 0, ce circuit est quivalent celui de la gure 11.3.

Regardons maintenant ce qui se passe quand le signal


le signal

reste 0 : quelle que soit la valeur de

prend la valeur

prend la valeur

1.

0.

a,

passe

1, alors que

la sortie du circuit du haut

Cette valeur est inverse par le circuit du bas dont la sortie

Maintenant, quand

et

repassent 0,

conserve la valeur

0.
R reste 0 et que c'est la valeur de S qui prend
a du circuit du bas prend la valeur 0 et celle du circuit du
valeur 1. Quand maintenant S repasse 0, la sortie q conserve sa

En revanche, quand la sortie


la valeur

1,

la sortie

haut prend la
valeur

1.

On a donc construit un circuit dans lequel on peut positionner une valeur


de sortie avec l'aide des signaux

et

(comme

Set

et

Reset

: mettre 1 ou

remettre 0), puis conserver cette valeur tant que les signaux R et S restent
0.
Quand les deux signaux

et

passent tous les deux 1 en mme temps, la

bascule entre dans un tat instable, de la mme manire que l'inverseur boucl
que nous avons vu en premier. Si les signaux repassent 0 en mme temps,
elle convergera vers un des deux tats stables mais nous ne pouvons pas prvoir
lequel ; pour cette raison, il faut viter de mettre les deux signaux
en mme temps ; on appelle cela l'tat

11.3

interdit.

et

La bascule D

La bascule RS n'est pas trs pratique manipuler directement avec ses deux
signaux en entre et son tat interdit mais elle sert de brique pour fabriquer une
cellule mmoire lmentaire de 1 bit, qu'on appelle la

114

bascule D.

D
out

in

Figure 11.5  La constitution d'une bascule D : cellule lmentaire de mmorisation d'un bit.

Sur la gure 11.5, on a la construction d'une telle bascule. Le signal

in

est

le signal mmoriser et il est transform avec un inverseur, de manire viter


l'tat interdit. Le signal
dans deux

Et ;

in

et son inverse sont ensuite combins avec le signal

Non-ou
in et son
inverse qu'on va trouver en sortie des Et et la valeur de la boucle de Non-ou de
D

si

D = 0,

la sortie des

Et

vaudra 0 et la boucle des

de droite conserve la valeur ; en revanche, quand

D = 1,

c'est le signal

droite sera positionne comme dans la bascule RS.

out la dernire valeur


in et l'utilise
comme nouvelle valeur mmoriser ; cette valeur sera celle du signal out quand
Donc, quand D vaut 0, la bascule prsente sur la sortie

mmorise. Quand D passe 1, la bascule lit la valeur du signal

repassera 0.
Souvent pour contrler la mmorisation d'une bascule, on utilise une

horloge :

il s'agit un signal dont la valeur oscille rgulirement entre 0 et 1. Pour tre


certain que la valeur soit lue au bon moment, on peut facilement utiliser des
bascules D qui seront active par le changement du signal de l'horloge. On parle
de

front montant pour le passage de 0 1 et de front descendant pour le passage

de

11.4

0.

Construction d'un mot mmoire avec des


bascules D

La bascule D ne permet de mmoriser qu'un seul bit alors que les mots de la
mmoire de nos ordinateurs contiennent des valeurs reprsentes avec plusieurs
chires. On construit facilement ceci en regroupant plusieurs bacsules D.

115

Bascule
D

in0

out0

Bascule
D

in1

Bascule
D

in2

out1

out2

Figure 11.6  La construction d'un mot de 3 bits partir de 3 bascules D.

La gure 11.6 prsente une construction possible pour un mot mmoire qui
contient cette fois trois bits, au lieu d'un seul : on a trois bascules D, avec chacune
son signal en entre et son signal `en sortie ; les trois bascules sont commandes
par le mme signal, donc les trois bascules vont mmoriser le signal sur leur
entre au mme instant.
Il est lmentaire d'imaginer comment, sur ce modle, on peut construire
des mots de tailles plus raisonnables, comme 8, 16, 32 ou 64 bits : il sut de
multiplier, sur le mme modle, le nombre de bascules D et de signaux en entre
et en sortie.

11.5

Lecture dans une mmoire de 4 1 bit

Quand on a plusieurs mots mmoire, il est ncessaire de slectionner l'un de


ces mots pour ne lire qu'une seule valeur. Pour cette slection, on attribue un
numro chaque case de la mmoire et on transmet, pour lire ou crire dans
une case, le numro de la case qu'on veut slectionner. C'est ce numro qu'on
appelle une

adresse.

116

a1
data
out

a0

registre
registre
registre
registre

Figure 11.7  La lecture dans une mmoire

41

bit.

La gure 11.7 prsente une mmoire de quatre mots de 1 bit. Pour simplier
le dessin, on n'a reprsent que la partie qui sert lire le contenu de la mmoire ;
l'criture sera prsente dans la gure suivante.
La slection du mot intressant se fait dans la partie en haut gauche de la
gure. qui consitue un

dcodeur d'adresse : les deux signaux a0 et a1 reprsentent


Et combinent ces

un nombre entre 0 et 3. Les quatre inverseurs et les quatre

deux valeurs de manire ce qu'un seul des quatre signaux en sortie vale 1
un moment donn, en fonction des valeurs de

a0

et

a1 .

Les quatre bascules D se trouvent en bas de la gure, avec l'tiquette

registre.

Comme on se contente, pour le moment de lire dans la mmoire, on a omis de


dessiner le signal en entre et la signal de contrle de ces bascules.
Sur la droite de la gure, les circuits

Et permettent de mettre 0 les signaux

qui sortent de toutes les bascles, sauf celle indique par la sortie du dcodeur

117

d'adresse. Finalement, les circuits

Ou servent a prsenter cette valeur slection-

ne sur la sortie (unique) du circuit.

11.6

Ecriture dans une mmoire de 4 1 bit

L'criture dans une mmoire fonctionne sur le mme principe.

a1
a0

ecrire

data
in

registre
registre
registre
registre

Figure 11.8  L'criture dans une mmoire

41

bit.

La gure 11.8 prsente de grandes similarits avec la gure prcdente. En


haut, le dcodeur d'adresse est le mme que pour la lecture mais cette fois le
signal (qui sert toujours choisir partir de l'adresse laquelle des bascules D
activer) est combin avec le signal

crire dans quatre Et supplmentaires.


118

Sur les bascules D, on a cette fois omis de reprsenter le signal en sortie


pusiqu'on se contente de considrer l'criture dans la mmoire. Le signal en
entre est envoy sur chacune des bascules mais quel que soit ce signal, l'tat
des bascules ne change pas tant que le signal
Quand le signal

crire

crire est 0.

passe 1, il est combin avec les quatre sorties du

dcodeur d'adresse dont un seul est 1 (toujours celui indiqu par la valeur
de

a0

et

a1

et donc c'est la bascule D d'adresse

a1 a0

va mmoriser la valeur

prsente en entre.

11.7

Lire et crire dans une mmoire x y bits

a1

data
out

a0

lire/ecrire

data
in

registre 3
registre 2
registre 1
registre 0

Figure 11.9  Lecture et criture dans une mmoire

41

bit.

La combinaison des deux gures 11.7 et 11.8 donne le schma de la gure


11.9. On a ici reprsent un circuit de mmoire qui permet de stocker quatre
mots de 1 bits. On peut, l'aide des signaux

a0

et

a1

slectionner l'un des quatre

mots et le signal lire/crire de commande permet soit de prsenter en sortie la


valeur mmorise dans la bascule D slectionne, soit de mmoriser dans cette
bascule la valeur prsente en entre (voir exercice).
Pour construire des mmoires avec plus de mots, il y a peu de modications
eectuer dans le circuit. Pour une mmoire de
aura

bits d'adresse en entre et

2n 1

bit, le circuit dcodeur

signaux en sortie, Ces signaux serviront

119

slectionner une seule parmi les


taille de l'arbre de

2n

bascules D. Enn, il faudra augmenter la

Et et Ou en sortie.

Pour construire des mmoires dont les mots contiennent

1,

bits, avec

m>

la modication est directe. Le signal en entre et le signal en sortie seront

remplacs par

signaux dirents. Chaque bascule D du dessin original sera

remplace par un groupe de


signal

bascules D qui seront controles par le mme

et dont l'entre sera l'un des signaux en entres. De mme, il faudra

dupliquer l'arbre de

Et et de Ou pour chacun des signaux de sortie.

D'une faon gnrale, la capacit des circuits mmoires est annonce sous

x y : le nombre de bits mmorisables dans le circuit est dans tous


x y ; x est le nombre de mots et y le nombre de bits dans chaque
mot. Le circuit intgr aura log2 (x) ls d'adresse et y ls de donnes en entre
et en sortie. Par exemple, deux circuits 1k 8 bits et 8k 1 bits permettent
tous les deux de mmoriser 8 kilo-bits mais le circuit 1k 8 bits aura 10 signaux
d'adresse et 8 signaux d'entre et de sortie, alors que le circuit 8k 1 bit aura
la forme

les cas de

13 signaux d'adresse pour un seul signal d'entre et de sortie.


Les mmoires telles que nous les avons vues ici sont une vue simplie par
rapport la varit des dispositifs de mmorisation qu'on rencontre dans les
ordinateurs rels. Elle est proche des mots de mmoire utiliss dans les processeurs, dans l'unit de calcul ou l'unit de contrle, qu'on appelle souvent des

registres.

11.8

Catgories de mmoire

Cette section fait un rapide survol des catgories les plus communes de mmoire.

11.8.1 Mmoire RAM


RAM,
Random Access Memory, c'est dire  mmoire accs alatoire , pour

D'une faon gnrale, on tend dsigner la mmoire sous le nom de


comme

la direncier des valeurs mmorises sur les bandes magntiques, les disques,
les CDROM et les DVD, pour lesquels il est bien plus rapide de lire ou d'crire
des donnes en squence, en les adressant dans l'ordre, plutt que d'accder
des adresses quelconques dans le dsordre.

11.8.2 Mmoire statique


La mmoire statique est le plus souvent construite partir de bascules D,
comme celles que nous avons vues dans la section prcdente. Ce sont des mmoires rapides, plutt chres, avec des capacits rduites par rapport aux mmoires dynamiques que nous prsentons dans la section suivante.

120

En pratique, elles sont en gnral utilises dans les PCs pour raliser les
mmoires

cache de niveau 2, qui contiennent une copie des zones de la mmoire

principale rcemment accdes. En 2007, la taille des mmoires caches d'un


processeur ordinaire est de l'ordre de quelques Mga-octets.

11.8.3 Mmoire dynamique


La mmoire centrale de nos ordinateurs est principalement consitue de mmoire

dynamique, qui utilise une autre technique de ralisation que celle prsen-

te dans ce chapitre : chaque bit de mmoire est constitu d'un condensateur qui
est charg pour reprsenter

et dcharg pour reprsenter

0.

Comme la charge

d'un condensateur s'attnue avec le temps, il est ncessaire de temps en temps


de repasser sur toute la mmoire, d'en lire le contenu et de le r-crire. Cette
opration est eectue de l'ordre d'un millier de fois par seconde. On appelle
cela

rafraichir la mmoire.

Comme cette technique est beaucoup plus conomique en silicium que celle
des ram statiques, les ram dynamiques ont des capacits plus importantes. Elles
se prsentent le plus souvent sous forme de

barrettes, des petits circuits imprims,

sur lesquels sont placs huit circuits de mmoire 1 bit pour raliser des mmoires
huits bits. La capacit ordinaire d'une mmoire dynamique en 2009 est de l'ordre
du Giga Octet.

11.8.4 Mmoire ROM et variantes


On trouve dans nos ordinateurs des mmoires dans lesquelles il est impossible d'crire. On les appelle des ROM (prononcer comme

Only Memory

Rome), comme Read

c'est dire  mmoire en lecture seule . Ce ne sont pas pro-

prement parler des circuits de mmorisation, puisque les sorties ne dpendent


que des entres mais c'est une faon pratique de considrer certains circuits
combinatoires.
Certaines ROM sont en fait des PROM, comme

Programmable ROM : chaque

bit de la mmoire est control par un fusible, qu'on peut faire fondre (une seule
fois !) pour modier la valeur contenue dans la mmoire, dans une machine
spciale qu'on appelle un

programmateur de PROM.

Cela permet d'avoir un

circuit bon march, parce que produit en grande quantit, que chacun peut
adapter son application.

euprome),
Erasable PROM, c'est dire des PROM eaables. Ces mmoires sont pro-

Certaines PROM sont en fait des EPROM (prononcer comme


des

grammables comme des PROM mais en les exposant des rayons ultra-violets,
on peut en eacer le contenu et les reprogrammer dans un programmateur
d'EPROM. Quand vous dmontez un vieil ordinateur, si vous voyez un circuit intgr plac sur un support d'o on peut l'extraire, avec une tiquette en
papier qui couvre le dessus, il s'agit probablement d'une EPROM ; en dtachant
l'tiquette vous verrez apparaitre une petite fentre qui est celle utilise pour

121

eacer la mmoire en exposant le circuit intgr aux ultra-violets. Le principal


avantage par rapport aux PROM, c'est qu'on peut rutiliser le circuit, ce qui
facilite la mise au point du programme plac dans l'EPROM.
D'autres PROM sont en fait des EEPROM (prononcer comme
des

Electrically Erasable PROM,

eu-euprome),

c'est dire des PROM eaable lectrique-

ment. On peut eacer le contenu de ces mmoires en utilisant des signaux de


commandes et des tensions lectriques particulires. Le principal intrt des EEPROM est qu'il n'y a pas besoin d'extraire le circuit intgr pour changer son
contenu. Le BIOS d'une carte mre peut tre stock dans une EEPROM, ce qui
permet sa mise jour sans dmonter l'ordinateur.
Une catgorie spcique d'EEPROM est la mmoire

Flash.

A la dirence

des EEPROM ordinaires, on y eace les donnes par bloc et non par octet.
La mmoire ash prsente l'avantage d'tre bon march, d'avoir une bonne
capacit et d'tre rapide d'accs en lecture. C'est elle qu'on trouve dans les
cartes mmoires des appareils photos, dans les baladeurs MP3 et dans les porteclefs USB. La mmoire ash prsente l'inconvnient, par rapport aux mmoires
ordinaires (et aux disques durs) de s'altrer aprs quelques milliers ou dizaines
de milliers d'critures.
A cot de ces types de mmoire, on rencontre aussi des mmoires, dites
parfois NVRAM (comme

Non Volatile RAM)

ou Mmoire CMOS (sur les PC)

qui sont en ralit des mmoires statiques ordinaires alimentes par des batteries.
C'est notamment l que sont stocks, sur les PCs, les paramtres du BIOS.
Quand on a oubli le mot de passe du BIOS, il sut de retirer la batterie de
la carte mre pour que le contenu du BIOS soit rinitialis. [Sur certains PC
rcents (en 2013), les paramtres du BIOS sont stocks dans une mmoire Flash ;
retirer la batterie de la carte mre ne rinitialise pas la mmoire ; il faut utiliser
une autre mthode ; en gnral, on peut l'eacer en dplaant un jumper sur la
carte.]

11.9

Exercices

Exercice 11.1 : Montrer que si les signaux R et S d'une bascule RS passent


tous les deux 1 au mme instant, la bascule RS sera dans un tat imprvisible
aprs qu'ils soient revenus 0.

Exercice

11.2 : Dessiner un circuit de mmorisation quivalent la bas-

cule RS avec des circuits

Non-Et

la place du circuit

Non-Ou.

Comment le

commande-t-on ?

Exercice

11.3 : La gure 11.9 contient un circuit

Non

et un circuit

Et

en

plus de la juxtaposition des gures 11.7 et 11.8. Deviner et expliquer leur rle.

Exercice 11.4 : Dessiner en dtail une mmoire 2 2 bits.


Exercice 11.5 : A l'aide d'un site comme www.rue-montgallet.com, trouver
l'ordre de grandeur du nombre de bits qu'on peut stocker pour environ 100 euros
dans une mmoire vive, dans une clef USB, sur un disque dur.

122

Chapitre 12
Automates

Avec les circuits logiques combinatoires, nous pouvons calculer des fonctions
logiques quelconques ; avec les circuits logiques suentiels, nous pouvons mmoriser des valeurs. En combinant ces deux types de circuits, nous sommes en
mesure de fabriquer des

automates simples qui raliseront des suites complexes

d'action.
Nous nous intresserons ici une classe restreinte d'automates, qu'on appelle des

automates nis dterministes que nous dnissons et utilisons de faon

informelle ici.

12.1

Les automates : un exemple simple

On peut dcrire les automates qui nous intressent par un graphe, compos
d'tats et de transitions. Ainsi, la gure 12.1 prsente un automate lmentaire
quatre tats et quatre transitions.

Les tats sont indiqus par des cercles ; ils sont relis entre eux par des

transitions,

reprsentes par des ches. A un moment donn, l'automate se

trouve dans un des tats (au dpart, dans l'tat 0). Une horloge externe bat la
mesure ; chaque battement de l'horloge, l'automate prend une des transitions
qui part de l'tat courant et arrive dans un autre tat. Ainsi, l'automate simple
de la gure 12.1 va passer successivement dans les tats 0, 1, 2 puis 3, pour
nalement revenir dans l'tat 0 et recommencer la boucle. Il ne s'arrte jamais.
Avec chaque transition, nous avons indiqu une action ; dans notre exemple,
crire une valeur, 0 ou 1. Notre automate va donc produire une suite
de bits tant qu'il fonctionnera.

123

00110011

etat 1
ecrire 0

ecrire 0

etat 0

etat 2

ecrire 1
ecrire 1
etat 3

Figure 12.1  Un automate simple qui produit 0 0 1 1 0 0 1 1 0 0 1 1 ...


.

12.1.1 Du graphe la ralisation


On peut raliser les automates d'une faon systmatique avec un registre
pour reprsenter l'tat courant et un bloc de logique combinatoire pour reprsenter les transitions et les signaux produire en sortie. Dans notre exemple, l'automate a quatre tats et il faudra donc deux bits pour le reprsenter ; appelons-les

e1

et

e0 .

La sortie, que nous notons

out

dpend de l'tat courant, en fonction de

la table de vrit suivante, o nous avons ajout pour faciliter la lecture une
colonne gauche qui contient le numro de l'tat.
tat courant

e1

e0

out

On voit sur la table de vrit que

out est simplement gal e1 , De mme, l'tat

d'arrive des transitions peut se calculer simplement comme une fonction logique
de

e1

et de

comme

s1

e0 . Notons ces valeurs qui reprsenteront le prochain tat courant


s0 . Les trois tables de vrit pour calculer out, s0 et s1 peuvent se

et

combiner dans la table suivante :

124

Horloge
s1
s0

e0
bascule D

bascule D

e1

out

Figure 12.2  Une ralisation de l'automate de la gure 12.1.


.

tat courant

tat suivant

e1

e0

out

s1

s0

De ces tables de vrit, nous dduisons que

s1 = e0 .e1 + e0 .e1

et que

s0 = e0 .

La ralisation de l'automate tel qu'il est reprsent sur la gure 12.2 est
maintenant directe : pour reprsenter l'tat courant, nous avons besoin d'un
registre de deux bits, que nous ralisons avec les deux bascules D en haut
gauche du schma ; les bascules D sont commandes par l'horloge, ce qui assurera
que l'automate change d'tat chaque battement d'horloge.

125

La valeur

out

prsente en sortie et l'tat suivant sont calculs par le bloc

de logique combinatoire qui occupe le bas du schma. Les deux valeurs pour
reprsenter le nouvel tat sont fournies en entres aux bascules D de manire
tre mmorises au prochain battement de l'horloge.

12.2

Ralisation d'un automate avec une entre

On peut construire avec la mme mthode un automate qui traite des donnes en entre. Un exemple simple est une machine qui reoit un nombre reprsent en binaire, bit par bit de droite gauche et multiplie ce nombre par
3.
Commenons par considrer la multiplication d'un bit par 3. Bien sur 3
0 = 0 et 3 1 = 3. Comme nous traitons des nombres en binaires, le cas
3 1 = 310 = 112 doit produire un rsultat de 1 (pour le bit de droite) et une
retenue de 1 (pour le bit de gauche. Cette retenue doit tre ajoute au rsultat
de la multiplication du bit suivant, quel que soit ce bit. Cela reprsente les deux
cas suivant : 3 0 + 1 = 1 et retenue= 0) quand
3 1 + 1 = 410 = 1002 = 0 et retenue= 102 quand le

le bit d'entre vaut 0 et


bit d'entre vaut 1.

102 = 210 . Cela fait :


3 1 + 102 = 1012 = 1

Il faut donc aussi traiter le cas o la retenue vaut

3 0 + 102 = 102 = 0 et retenue = 1


retenue = 102 d'autre part.

d'une part et

La retenue ne peut donc prendre que les valeurs

0, 1

et

102

et nous avons

ainsi examin tous les cas possibles, rsums dans la table suivante :

3 bit + retenue
30+0
30+1
30+2
31+0
31+1
31+2

rsultat

bit produit

retenue

210 = 102
310 = 112
410 = 1002
510 = 1012

10

10

Il faut mmoriser la retenue de l'opration prcdente : pour cela nous utilisons les tats de l'automate : chaque tat permet de se souvenir de la valeur
de la retenue ; partir d'un tat partent deux transitions, tiquetes par

et

: suivant la valeur du bit en entre, l'automate prend l'une ou l'autre des

transitions pour aller vers un nouvel tat qui mmorise la nouvelle valeur de
la retenue ; avec chaque transition, il y a aussi la production du bit de rsultat
correct. L'automate est reprsent sur la gure 12.3.

Pour faire fonctionner l'automate, on se place dans l'tat de dpart (l'tat


a), puis on eectue son travail : (1) lire le bit suivant du nombre multiplier, (2)

126

0 lu
ecrit 0

1 lu
ecrit 0

1 lu
ecrit 1

etat a
retenue = 0

etat c
retenue = 2

etat b
retenue = 1

0 lu
ecrit 1

0 lu
ecrit 0

Figure 12.3  L'automate de multiplication par 3. Chaque transition est tiquete par le bit lu et est accompagne d'une valeur produire. Chaque tat
correspond une valeur de la retenue.

choisir la transition qui y correspond depuis l'tat courant, (3) crire la valeur
indique sur la transition, (4) l'tat d'arrive de la transition est le nouvel tat
courant, recommencer l'tape (1).
Si l'automate reoit en entre les bits 110010 qui correspondent au nombre
0100112 = 1910 , il va passer par les tats a, b, c, b, a, b, a et produire les bits
100111 qui correspondent au nombre 1110012 = 718 = 5710 . Le travail sur cet
exemple peut se rsumer dans la table suivante :
tat

bit lu

bit crit

Une fois que l'automate est dessin, nous sommes en mesure de construire
la table de vrit qui y correspond : chaque combinaison de l'tat courant
(reprsent sur deux bits

e1

et

e0 )

et du bit entrant

nouvel tat (reprsent sur deux bits

n1

et

n0 )

i,

on fait correspondre le

et le bit de sortie

comme dans

la table de vrit qui suit :


tat courant

e1

e0

etat suivant

n1

n0

Comme on peut le voir, nous avons complt la table avec les lignes qui rendent

127

1 lu
ecrit1

compte de l'tat 3, que nous n'utilisons pas, pour lequel les valeurs de sorties
sont quelconques ; nous pouvons, si c'est utile, choisir d'utiliser ces valeurs pour
simplier les expressions dans notre table de Karnaugh.
On peut donc calculer les fonctions qui permettent de calculer

n1 , n0

et

comme :

n1 =
n0 =
o=

e1.e0.i + e1.e0.i
e1.e0.i + e1.e0.i
e1.e0.i + e1.e0.i + e1.e0.i

On utilise les tables de Karnaugh pour simplier ces expressions et on trouve


pour

donc

n1

e1 e0

e1 e0

donc

e1 e0
V

n1 = e1 .i + e0 .i.
e1 e0

donc

e1 .e0

e1 e0

e1 .e0

e1 e0

e1 e0

e1 .e0

e1 e0

n0 = e1 .i + e1 .e0 .i.
e1 e0
V

o = e0 .i + e0 .i.

Il sut maintenant de raliser le circuit comme sur la gure 12.4 pour avoir
une implmentation de l'automate. Le circuit proprement parler est l'intrieur du rectangle pointill ; il y a deux signaux en entres et un signal en
sortie
En entre l'horloge sert cadencer le fonctionnment. Sur le signal

sont

prsents, chaque battement de l'horloge, la valeur du bit suivant du nombre


multiplier. En sortie, le signal

o contiendra la valeur du bit suivant du rsultat

de la multiplication du nombre en entre.


Lors du battement de l'horloge, la valeur du bit prsent sur

est mmoris

dans la bascule D du bas, alors que les deux bascules du haut prennent la valeur
du prochain tat destination calcul par la dernire transition.
Ces valeurs sont alors envoyes dans le bloc de logique combinatoire qui
occupe toute la partie droite du circuit. Il produit la valeur du prochain bit du
rsultat (sur

o)

et le prochain tat (sur

prochain battement de l'horloge.

128

n0

et

n1 )

qui sera mmoriss lors du

horloge

n1

n0 D

e1

e0

D
i

o
Figure 12.4  Une ralisation de l'automate pour multiplier (la reprsentation
d')un nombre (en binaire) par 3.

129

12.3

Un automate gnral

On peut raliser sur le mme mode un automate quelconque : un registre


contient l'tat courant ; un bloc de logique calcule les signaux de sortie et l'tat
suivant partir de l'tat courant et des signaux en entre ; une horloge assure
la transition d'un tat au suivant. On a reprsent l'architecture gnrale des
automates sur la gure 12.5.

horloge

signaux
en entree

registre
detat

Logique
de calcul
signaux
en sortie
Figure 12.5  L'architecture gnrale d'un automate

12.4

Exercices

Exercice
11001

12.1 : Raliser un automate qui produise la squence de valeurs

en utilisant la mme technique que pour le premier automate simple.

Exercice 12.2 : Dessiner le graphe d'un automate qui ralise une multiplication par 5 sur le modle de celui de la multiplication par 3. Quelle sera l'quation
qui permettra de calculer la sortie en fonction des bits du numro de l'tat ?

Exercice 12.3 : L'automate de la gure 12.6 lit un nombre binaire bit par
bit et dtermine si c'est un multiple de 3. Dessiner le circuit qui lui correspond.

130

lu 0

lu 1
lu 0

etat 0
reste 0

etat 1
reste 1
lu 1

etat 2
reste 2

lu 1

lu 0

Figure 12.6  Quand l'automate est dans l'tat 0, le nombre lu jusqu' maintenant est un multiple de 3.

131

Chapitre 13
L'ordinateur en papier

Voici un ordinateur qui fonctionne sans lectricit ; il sut d'un papier, d'un
crayon et d'une gomme (et d'un peu de patience) pour le faire fonctionner. (Ce
chapitre est une retranscription du support de cours conu par Vincent Lesbros
en octobre 1990.)
Son schma est rduit au minimum mais le principe de fonctionnement est
inspir de celui de petits processeurs squentiels qui existent rellement.

13.1

Anatomie

L'ordinateur en papier possde une mmoire (la grille carre) dont chaque
case est numrote. Chaque case peut contenir une valeur numrique (note en
base seize ou systme de numration hexadcimal, avec deux chires) variant
de 00 FF.
La mmoire contient deux registres :
 Le

Registre de Slection (RS) permet de dsigner une case de la mmoire

par son numro (ou adresse).


 Le

Registre Mot

(RM) permet d'changer des valeurs entre la mmoire

et l'unit centrale.
La mmoire est de 256 cases, donc les adresses des cases vont de 00 FF (et
peuvent tre galement contenues dans des cases de la mmoire pour constituer
un

pointeur).

L'unit centrale comporte une unit de contrle et une Unit Arithmtique


et Logique (UAL). L'ordinateur est dot en outre des indispensables moyens de
communication avec l'extrieur : une entre pour saisir des donnes et une sortie
pour exprimer les rsultats des traitements.
L'unit de contrle contient :
 une horloge (non gure) qui cadence le droulement des oprations
 le registre (PC)

Program Counter qui dsigne l'adresse en mmoire de la


132

prochaine instruction du programme excuter.


 le squenceur a accs au

Registre Instruction (RI), lui-mme constitu de


code opratoire

deux registres (OP) et (AD) contenant respectivement le

de l'instruction en cours et l'adresse de la donne traiter.


L'unit arithmtique et logique est capable d'eectuer des additions, des
soustractions et des oprations boolenne.
L'opration faire s'inscrit dans la case trapzodate, les oprandes sont

Accumulateur

l'

(le registre (A)) et le registre mot (RM) ; les rsultats des op-

rations sont toujours rendus dans l'accumulateur.


Les dirents registres sont des cases pouvant contenir une valeur de huit
bits (deux chires hexadcimaux) comme les cases de la mmoire. Les registres
sont relis entre eux par des lignes (les bus) et les transferts de valeur par ces
lignes sont gouverns par le squenceur (suivant l'instruction en cours).

13.2

Fonctionnement

Cette petite machine universelle ne peut fonctionner sans programme : il


faut inscrire dans la mmoire une suite d'instructions eectuer (ou excuter)
et placer dans le registre (PC) l'adresse de la premire instruction.
Pour crire le programme, reportez-vous aux rubriques suivantes :

d'assemblage et modes d'adressage.

Quand le programme est crit, faites

tourner

langage

le programme en rptant le

cycle. Le cycle est constitu de trois phases : La premire phase est la recherche
d'instruction, la deuxime phase contient le dcodage de l'instruction et sa ralisation proprement dite (recherche de l'oprande et calcul ventuel), la troisime
phase (qui peut tre omise dans certains cas) permet de pointer vers l'instruction
suivante.
La rubrique

cycle vous indique pour chaque phase la squence de microcode

eectuer. (Les microcodes sont nots dans des cercles.) Pour la deuxime phase,
la squence de microcode dpend du code opratoire inscrit dans le registre OP.
La rubrique

les microcodes vous donne, pour chaque microcode, les choses

faire avec votre crayon et votre gomme.

133

13.3

Le langage d'assemblage

Mnmoniques
arithmtique
]

ADD
SUB ]
SUB
SUB

Code opratoire

ADD

20

ADD

60

NAND
NAND
NAND

21
61
E1

62
E2

]
LOAD
LOAD
STORE
STORE
LOAD

40
C0
48

IN
OUT
OUT
IN

C8

C1

() Entre
() Entre
Sortie ()
Sortie ()

10

PC

11

si

12

si

49
C9
41

Branchement
inconditionnel

conditinonels
BRZ

AV
A ()
A ()
() A
() A

00

Entres / Sorties

BRN

A [A&V ]
A [A&()]
A [A& ()]

22

transferts

JUMP

AA+V
A A + ()
A A + ()
AAV
A A ()
A A ()

E0

logique

description

A<0
A=0

alors PC
alors PC

Lgende :
La che

reprsente

l'aectation.

() reprsente le contenu de la case d'adresse alpha.

()

reprsente le contenu de la case dont l'adresse est dans la

case d'adresse alpha.

V est la valeur donne immdiatement.


reprsente le non logique.
& reprsente le et logique.
Les crochets [ ] groupent les termes sur lesquels
opration.

134

s'applique une

Chaque instruction est code sur deux octets, le premier est le code opratoire (dans un rectangle), le second est la valeur ou l'adresse de l'oprande.
Par exemple :
LOAD 1F (charger le contenu de la case 1F dans A)
s'encode avec : 40 1F dans deux cases conscutives.
LOAD

]00

(mettre 00 dans A)

s'encode avec : 00 00, toujours sur deux octets.

13.4

Les modes d'addressage

Les modes d'adressages correspondent aux drentes faons d'accder aux


donnes traiter.

Adressage immdiat
Dans l'adressage immdiat, on donne directement la valeur avec laquelle
l'opration est eectuer.
Exemples
Mnmoniques
LOAD

]FF

hexadcimal

description

00

Charge l'accumulateur avec la valeur FF.

FF
Mnmoniques
ADD

]01

hexadcimal

description

20

Incrmente l'accumulateur (c'est dire ajoute 1

01

son contenu)

Adressage absolu
L'adressage absolu permet de dsigner une valeur par son adresse en mmoire
(ce mode est quali d'

absolu par opposition aux modes dits relatifs qui spcient

une adresse en mmoire grce un dplacement par rapport une adresse de


rfrence ; ici, la rfrence est le dbut de la mmoire).
Exemple
Mnmoniques

hexadcimal

LOAD 22

40

ADD 20

60

22
20
Ce programme charge l'accumulateur avec la valeur contenue dans la case mmoire d'adresse 22 puis ajoute cette valeur le contenu de la case mmoire 20 ;
le rsultat est dans l'accumulateur.

135

Adressage indirect
L'adressage indirect permet de faire une

indirection, c'est dire de dsigner

la valeur traiter en spciant l'adresse d'une case qui contient l'adresse de la


valeur.
Une case mmoire contenant l'adresse d'une autre case mmoire est appele

pointeur.

Ce mode permet de spcier une valeur en donnant l'adresse du

pointeur vers la valeur.


Exemple
Mnmoniques

hexadcimal

SUB * 1F

E1
1F

Par cette instruction, l'accumulateur va tre dcrment de la valeur dont l'adresse


est dans la case mmoire d'adresse 1F. Si, avant cette instruction, l'accumulateur contenait 10, la case mmoire 1F contenait AF et la case AF contenait 2,
alors l'accumulateur contiendra 0E aprs l'excution de l'instruction (10

02

= 0E).

13.5

Les microcodes

Cette rubrique contient la descrption des oprations eectuer pour chacun


des microcodes.

Transferts
Gommez le contenu du registre gauche de la che et y inscrire le contenu
de celui de droite.

1
(RS) (PC)


2
(PC) (RM) ; ne


3
(A) (RM)


4
(RM) (A)


5
(OP) (RM)


6
(AD) (RM)


7
(RS) (AD)


8
(RM) (Entre)


9
(Sortie) (RM)


pas faire la phase III.

136

Prparation du calcul

10 crire + dans UAL


11 crire dans UAL (la


17 crire


(la case trapzodale)


case trapzodale)

NAND dans UAL (la case trapzodale)

Calculer


12 Eectuer


l'opration ache sur l'UAL en prenant le contenu de

(A) comme premier oprande et le contenu de (RM) comme second. Ecrivez le


rsultat dans l'accumulateur (A).

Commandes de la mmoire


13 Lecture


de la mmoire :

Dcodez l'adresse contenue dans le registre de slection (RS) en prenant le chire


gauche (ou Haut) pour numro de colonne et le droit (ou Bas) pour numro de
ligne. Reportez le contenu de la case mmoire ainsi dsigne dans le registre mot
(RM).


14 Ecriture


en mmoire :

Dcodez l'adresse contenue dans le registre de slection (RS) de la mme faon


que pour la lecture. Reportez le contenu du registre mot (RM) dans la case
mmoire.

Divers

15 Incrmenter le contenu de (PC) le pointeur ordinal pour pointer sur





l'instruction ou la valeur suivante.


16 Attendre


13.6

qu'une valeur soit crite dans l'Entre.

Le cycle

Phase I : Recherche de l'instruction







1
13
5
15 passer





la phase II

137

Phase II Dcodage de l'instruction, recherche d'oprande et calcul


Valeur de (OP)

microcodes





00

3
13
1







10

puis passer la
2
13
1







phase I

11

Si (A) < 0

2
13
1
puis







phase I

12

Si (A) = 0

puis
2
13
1








phase I

20

12
13
1
10









21

12
13
1
11









22

17
1
13
12











40

1
13
6
7
13
3













41

1
13
6
7
13
9













48

1
13
6
7
4
14














49

1
13
6
7
16
8
14















60

10
1
13
6
7
13
12















61

11
1
13
6
7
13
12















62

17
1
13
6
7
13
12

















C0

1
13
6
7
13
6
7
13
3



















C1

1
13
6
7
13
6
7
13
9



















C8

1
13
6
7
13
6
7
4
14




















C9

1
13
6
7
13
6
7
16
8
14





















E0

10
1
13
6
7
13
6
7
13
12





















E1

11
1
13
6
7
13
6
7
13
12











A faire (voir exercice)

E2

Phase III


15 puis


13.7
Le

phase I

Exemple de programme : un boot-strap


boot-strap est le programme de lancement de l'ordinateur ; il est implant

une adresse qui est place dans le PC chaque dmarrage, c'est donc le premier
programme tre excut et il est charg de faire le ncessaire pour la mise en
place et le fonctionnement du systme d'exploitation.

138

Le programme qui suit permet de charger en mmoire votre propre programme et de l'excuter.
Mode d'emploi :
 Ecrivez le programme partir de l'adresse 00
 Allumez l'ordinnateur :

(PC) 00

 Entrez l'adresse de dbut de votre programme


 Entrez la taille (en nombre d'octets) utilise par votre programme, puis
entrez tour tour chaque code constituant votre programme.

adresse

code

mnmonique

commentaire

00

49

IN 20

Entrez l'adresse de chargement du programme

01

20

02

49

IN 22

Entrez la taille du programme

03

22

04

40

LOAD 20

05

20

06

48

STORE 21

Adresse courante

07

21

08

C9

IN * 21

Entrez une instruction ou une valeur

09

21

0A

40

LOAD 22

0B

22

0C

21

0D

01

0E

12

0F

1F

10

48

11

22

12

40

13

21

14

20

15

01

16

10

17

06

SUB

]1

adresse

Nb.

du programme

d'octets restant charger

Dcrmenter le Nb. d'octets

BRZ 1F

Excuter le programme si tout est charg

STORE 22

Ranger le nouveau Nb. d'octets

LOAD 21

Reprendre l'adresse courante dans A

ADD

]1

JUMP 06

l'incrmenter
Continuer charger

18

1E

00

1F

10

JUMP ? ?

20

??

l'adresse de dbut

21

??

Adresse courante

22

??

Taille (ou Nb. d'octets)

Brancher sur ...

Les adresses 00 1F sont censes tre en mmoire morte et la mmoire vive


commence 20.

13.8

Exercices

Exercice 13.1 : Il manque les microcodes de la phase 2 pour le cas o OP


139

B
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
7

R
S

R
M

1
3
O
P
+1
15

A
D

6
A

Sequenceur

Entree
9

UAL

140

P
C

2
Unite de controle

Sortie

contient E62. Complter.

Exercice 13.2 : tant donn la logique qui existe entre les codes opratoires
et le microcode, quelle code pourrait correspondre l'instruction

IN ] ?

Exercice 13.3 : tant donn la logique qui existe entre les codes opratoires
et le microcode, quelle opration pourrait correspondre le code 01 ?

Exercice 13.4 : (Pig) Dans le programme de bootstrap, les adresses 18


1E sont remplies de 0. Que se passe-t-il au cours du boot-strap quand l'ordinateur excute ces instructions ?

Exercice

13.5 : crire un programme pour l'ordinateur en papier qui lit

deux nombres et ache leur produit. Comme pour le programme de bootstrap


donn dans le chapitre, indiquer les adresses, les codes, les mnmoniques et les
commentaires. (on peut calculer le produit avec une suite d'additions simple ;
faute de dcalage droite, l'ordinateur en papier ne nous permet pas d'utiliser
l'algorithme plus rapide vu en cours).

Exercice

13.6 : Mme question que prcdemment pour la division, avec

des soustractions successives.On pourra s'inspirer de l'algorithme suivant :

Etant donn x et y , calculer a et b tels que a x + b = y


a0
by
tant que b > x
aa+1
bbx

Exercice 13.7 : Quelles parties de l'ordinateur faut-il modier pour ajouter


une instruction

SHIFT

de dcalage droite ? Dcrire ces modications, choisir

un code opratoire, dtailler les modications apporter au squenceur.

Exercice 13.8 : (Assez dicile) Dans la mmoire, on trouve de l'adresse 30


45 les valeurs suivantes : 10, 3a, 00 31 40 32 60 33 48 32 49 33 40 33 22  12 34
41 32 10 44. Dans PC se trouve 30. Que fera ce programme quand l'ordinateur
en papier va tourner et l'excuter ?

Exercice 13.9 : (Assez facile) Indiquer les mnmoniques qui correspondent


aux valeurs suivantes dans la mmoire.
(Dicile) Commenter le programme. Que fait-il ?

141

adresse

valeur

50

49 70

52

40 70

54

48 71

56

48 72

58

00 5E

5A

48 8d

5C

10 74

5E

40 71

60

48 72

62

40 70

64

48 71

66

00 6C

68

48 8d

6A

10 74

6C

41 71

6E

10 6E

70

00

71

00

72

00

73

00

74

00 00

76

48 73

78

40 71

7A

12 88

7C

21 01

7E

48 71

80

40 73

82

60 72

84

48 73

86

10 78

88

40 73

8a

48 71

8c

10 00

Exercice 13.10 : (Amusant mais dicile) crire un programme qui met la


plus grande partie possible de la mmoire 0 (en supposant qu'il n'y a pas de
mmoire morte).

Exercice 13.11 : (Long, pas de corrig) crire un programme d'extraction


de la racine carre d'un nombre, avec la mthode de Newton pour l'ordinateur
en papier.

142

Chapitre 14
Projet et valuation

Ce court chapitre est destin vous permettre de donner votre valuation


du cours. Merci de prendre aussi le temps de rpondre aux questions suivantes
pour m'aider valuer la faon dont le cours s'est pass de votre point de vue.
Notez que l'ide est d'essayer d'amliorer les choses, aussi les rponses exces-

 Le chapitre le plus intressant ?


Aucun. Le chapitre le moins intressant ? Tous. , on ne peut pas faire grand

sives sont peu prs inutiles. Par exemple avec


chose.

 Le contenu du cours a-t-il correspondu ce que vous attendiez ? (si non,


de quelle manire)
 Qu'est-ce qui vous a le plus surpris (en bien) ?
 Qu'est-ce qui vous a le plus du ?
 Quels taient les chapitres les plus diciles ?
 Quels taient les chapitres les plus faciles ?
 Quels taient les chapitres les plus intressants ?
 Quels taient les chapitres les moins intressants ?
 Que me suggreriez-vous de modier dans l'ordre des chapitres ?
 Qu'est-ce qui est en trop dans le cours ?
 Qu'est-ce qui manque dans le cours ?
 Comment taient les exercices du point de vue quantit (pas assez, trop).
 Comment taient les exercices du point de vue dicult (trop durs, trop
faciles) ?
 Que donneriez-vous comme conseil un tudiant qui va suivre le cours ?
 Que me donneriez-vous comme conseil en ce qui concerne le cours ?
 Si vous deviez mettre une note globale au cours, entre 0 et 20, laquelle
mettriez-vous ?
 Quelles questions manque-t-il pour valuer correctement le cours (et bien
videmment, quelle rponse vous y apporteriez) ?

143

GNU Free Documentation


License

Version 1.3, 3 November 2008


Copyright

2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.

<http ://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom : to assure everyone
the eective freedom to copy and redistribute it, with or without modifying it,
either commercially or noncommercially. Secondarily, this License preserves for
the author and publisher a way to get credit for their work, while not being
considered responsible for modications made by others.
This License is a kind of "copyleft", which means that derivative works of the
document must themselves be free in the same sense. It complements the GNU
General Public License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software,
because free software needs free documentation : a free program should come
with manuals providing the same freedoms that the software does. But this
License is not limited to software manuals ; it can be used for any textual work,
regardless of subject matter or whether it is published as a printed book. We
recommend this License principally for works whose purpose is instruction or
reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be distributed
under the terms of this License. Such a notice grants a world-wide, royaltyfree license, unlimited in duration, to use that work under the conditions stated
herein. The "Document", below, refers to any such manual or work. Any member
of the public is a licensee, and is addressed as "you". You accept the license if
you copy, modify or distribute the work in a way requiring permission under

144

copyright law.
A "Modied Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modications and/or
translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the publishers
or authors of the Document to the Document's overall subject (or to related
matters) and contains nothing that could fall directly within that overall subject.
(Thus, if the Document is in part a textbook of mathematics, a Secondary
Section may not explain any mathematics.) The relationship could be a matter
of historical connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding them.
The "Invariant Sections" are certain Secondary Sections whose titles are
designated, as being those of Invariant Sections, in the notice that says that
the Document is released under this License. If a section does not t the above
denition of Secondary then it is not allowed to be designated as Invariant.
The Document may contain zero Invariant Sections. If the Document does not
identify any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed, as FrontCover Texts or Back-Cover Texts, in the notice that says that the Document is
released under this License. A Front-Cover Text may be at most 5 words, and
a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specication is available to the general public, that
is suitable for revising the document straightforwardly with generic text editors
or (for images composed of pixels) generic paint programs or (for drawings) some
widely available drawing editor, and that is suitable for input to text formatters
or for automatic translation to a variety of formats suitable for input to text
formatters. A copy made in an otherwise Transparent le format whose markup,
or absence of markup, has been arranged to thwart or discourage subsequent
modication by readers is not Transparent. An image format is not Transparent
if used for any substantial amount of text. A copy that is not "Transparent" is
called "Opaque".
Examples of suitable formats for Transparent copies include plain ASCII
without markup, Texinfo input format, LaTeX input format, SGML or XML
using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modication. Examples of transparent image
formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML
or XML for which the DTD and/or processing tools are not generally available,
and the machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself, plus such
following pages as are needed to hold, legibly, the material this License requires

145

to appear in the title page. For works in formats which do not have any title
page as such, "Title Page" means the text near the most prominent appearance
of the work's title, preceding the beginning of the body of the text.
The "publisher" means any person or entity that distributes copies of the
Document to the public.
A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following text that
translates XYZ in another language. (Here XYZ stands for a specic section
name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you
modify the Document means that it remains a section "Entitled XYZ" according to this denition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty Disclaimers
are considered to be included by reference in this License, but only as regards
disclaiming warranties : any other implication that these Warranty Disclaimers
may have is void and has no eect on the meaning of this License. 2. VERBATIM
COPYING
You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and
the license notice saying this License applies to the Document are reproduced in
all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or
further copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough number
of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you
may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed
covers) of the Document, numbering more than 100, and the Document's license
notice requires Cover Texts, you must enclose the copies in covers that carry,
clearly and legibly, all these Cover Texts : Front-Cover Texts on the front cover,
and Back-Cover Texts on the back cover. Both covers must also clearly and
legibly identify you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and visible. You may
add other material on the covers in addition. Copying with changes limited to
the covers, as long as they preserve the title of the Document and satisfy these
conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to t legibly, you
should put the rst ones listed (as many as t reasonably) on the actual cover,
and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more

146

than 100, you must either include a machine-readable Transparent copy along
with each Opaque copy, or state in or with each Opaque copy a computernetwork location from which the general network-using public has access to
download using public-standard network protocols a complete Transparent copy
of the Document, free of added material. If you use the latter option, you must
take reasonably prudent steps, when you begin distribution of Opaque copies
in quantity, to ensure that this Transparent copy will remain thus accessible at
the stated location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that edition to the
public.
It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a
chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modied Version of the Document under the
conditions of sections 2 and 3 above, provided that you release the Modied
Version under precisely this License, with the Modied Version lling the role
of the Document, thus licensing distribution and modication of the Modied
Version to whoever possesses a copy of it. In addition, you must do these things
in the Modied Version :
A. Use in the Title Page (and on the covers, if any) a title distinct from that
of the Document, and from those of previous versions (which should, if there
were any, be listed in the History section of the Document). You may use the
same title as a previous version if the original publisher of that version gives
permission.
B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modications in the Modied Version, together
with at least ve of the principal authors of the Document (all of its principal
authors, if it has fewer than ve), unless they release you from this requirement.
C. State on the Title page the name of the publisher of the Modied Version,
as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modications adjacent to
the other copyright notices.
F. Include, immediately after the copyright notices, a license notice giving the
public permission to use the Modied Version under the terms of this License,
in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections and
required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add to it an
item stating at least the title, year, new authors, and publisher of the Modied
Version as given on the Title Page. If there is no section Entitled "History" in

147

the Document, create one stating the title, year, authors, and publisher of the
Document as given on its Title Page, then add an item describing the Modied
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations
given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that
was published at least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications", Preserve
the Title of the section, and preserve in the section all the substance and tone
of each of the contributor acknowledgements and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document, unaltered in their
text and in their titles. Section numbers or the equivalent are not considered
part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section may not be
included in the Modied Version..
N. Do not retitle any existing section to be Entitled "Endorsements" or to
conict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modied Version includes new front-matter sections or appendices
that qualify as Secondary Sections and contain no material copied from the
Document, you may at your option designate some or all of these sections as
invariant. To do this, add their titles to the list of Invariant Sections in the
Modied Version's license notice. These titles must be distinct from any other
section titles.
You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modied Version by various partiesfor example,
statements of peer review or that the text has been approved by an organization
as the authoritative denition of a standard.
You may add a passage of up to ve words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover
Texts in the Modied Version. Only one passage of Front-Cover Text and one
of Back-Cover Text may be added by (or through arrangements made by) any
one entity. If the Document already includes a cover text for the same cover,
previously added by you or by arrangement made by the same entity you are
acting on behalf of, you may not add another ; but you may replace the old one,
on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give
permission to use their names for publicity for or to assert or imply endorsement
of any Modied Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this

148

License, under the terms dened in section 4 above for modied versions, provided that you include in the combination all of the Invariant Sections of all of the
original documents, unmodied, and list them all as Invariant Sections of your
combined work in its license notice, and that you preserve all their Warranty
Disclaimers.
The combined work need only contain one copy of this License, and multiple
identical Invariant Sections may be replaced with a single copy. If there are
multiple Invariant Sections with the same name but dierent contents, make
the title of each such section unique by adding at the end of it, in parentheses,
the name of the original author or publisher of that section if known, or else
a unique number. Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History" in
the various original documents, forming one section Entitled "History" ; likewise
combine any sections Entitled "Acknowledgements", and any sections Entitled
"Dedications". You must delete all sections Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this License in
the various documents with a single copy that is included in the collection,
provided that you follow the rules of this License for verbatim copying of each
of the documents in all other respects.
You may extract a single document from such a collection, and distribute it
individually under this License, provided you insert a copy of this License into
the extracted document, and follow this License in all other respects regarding
verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and
independent documents or works, in or on a volume of a storage or distribution
medium, is called an "aggregate" if the copyright resulting from the compilation
is not used to limit the legal rights of the compilation's users beyond what
the individual works permit. When the Document is included in an aggregate,
this License does not apply to the other works in the aggregate which are not
themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the
Document, then if the Document is less than one half of the entire aggregate, the
Document's Cover Texts may be placed on covers that bracket the Document
within the aggregate, or the electronic equivalent of covers if the Document is
in electronic form. Otherwise they must appear on printed covers that bracket
the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modication, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sec-

149

tions with translations requires special permission from their copyright holders,
but you may include translations of some or all Invariant Sections in addition to
the original versions of these Invariant Sections. You may include a translation
of this License, and all the license notices in the Document, and any Warranty
Disclaimers, provided that you also include the original English version of this
License and the original versions of those notices and disclaimers. In case of a
disagreement between the translation and the original version of this License or
a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements", "Dedications",
or "History", the requirement (section 4) to Preserve its Title (section 1) will
typically require changing the actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense, or distribute it is void, and will automatically terminate your rights
under this License.
However, if you cease all violation of this License, then your license from
a particular copyright holder is reinstated (a) provisionally, unless and until
the copyright holder explicitly and nally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some
reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder noties you of the violation by some reasonable
means, this is the rst time you have received notice of violation of this License
(for any work) from that copyright holder, and you cure the violation prior to
30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses
of parties who have received copies or rights from you under this License. If your
rights have been terminated and not permanently reinstated, receipt of a copy
of some or all of the same material does not give you any rights to use it.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the GNU
Free Documentation License from time to time. Such new versions will be similar
in spirit to the present version, but may dier in detail to address new problems
or concerns. See http ://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the
Document species that a particular numbered version of this License "or any
later version" applies to it, you have the option of following the terms and
conditions either of that specied version or of any later version that has been
published (not as a draft) by the Free Software Foundation. If the Document
does not specify a version number of this License, you may choose any version
ever published (not as a draft) by the Free Software Foundation. If the Document
species that a proxy can decide which future versions of this License can be

150

used, that proxy's public statement of acceptance of a version permanently


authorizes you to choose that version for the Document.
11. RELICENSING
"Massive Multiauthor Collaboration Site" (or "MMC Site") means any World
Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody
can edit is an example of such a server. A "Massive Multiauthor Collaboration"
(or "MMC") contained in the site means any set of copyrightable works thus
published on the MMC site.
"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-prot corporation
with a principal place of business in San Francisco, California, as well as future
copyleft versions of that license published by that same organization.
"Incorporate" means to publish or republish a Document, in whole or in
part, as part of another Document.
An MMC is "eligible for relicensing" if it is licensed under this License, and
if all works that were rst published under this License somewhere other than
this MMC, and subsequently incorporated in whole or in part into the MMC,
(1) had no cover texts or invariant sections, and (2) were thus incorporated prior
to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site
under CC-BY-SA on the same site at any time before August 1, 2009, provided
the MMC is eligible for relicensing.

151