NUMERATION
1/18
SOMMAIRE AUTOMATIQUE
1 ) Objectifs............................................................................................................................2
2 ) Les nombres en base décimale ( base 10 )..........................................................................2
2.1 ) Naturels, relatifs et décimaux ( avec virgule ) .............................................................2
2.2 ) Base, rang et poids......................................................................................................2
2.3 ) Représentation polynomiale........................................................................................3
3 ) Les codes binaires pondérés ..............................................................................................3
3.1 ) Codage des entiers naturels.........................................................................................3
3.1.1 ) Le système binaire naturel....................................................................................3
3.1.2 ) Le système octal ..................................................................................................4
3.1.3 ) Le système hexadécimal ......................................................................................5
3.1.4 ) Le BCD ...............................................................................................................5
3.1.5 ) Changements de base...........................................................................................6
3.2 ) Codage des entiers relatifs ..........................................................................................8
3.2.1 ) Le complément à deux ( CPL2 ) et le binaire signé ..............................................8
3.2.2 ) Addition et soustraction d’entiers relatifs ...........................................................10
3.2.3 ) Multiplication et division ...................................................................................11
3.3 ) Codage des nombres à virgule ..................................................................................12
4 ) Autres codes usuels .........................................................................................................14
4.1 ) Le code GRAY.........................................................................................................14
4.2 ) Le code ASCII..........................................................................................................16
4.3 ) Les codes à détection d’erreur...................................................................................18
4.4 ) Les codes barres .......................................................................................................18
Cours Numération [Link]
NUMERATION
2/18
1 ) Objectifs
A l’issue de ce cours, vous connaîtrez les principaux codages utilisés en
programmation :
– binaire
– hexadécimal
– BCD
– Virgule flottante
– ASCII
D’autres codages seront abordés :
– Gray
– ASCII
– Détection d’erreur
– CODE BARRE
2 ) Les nombres en base décimale ( base 10 )
Tels Monsieur Jourdain, vous pratiquez la base 10 sans le savoir.
2.1 ) Naturels, relatifs et décimaux ( avec virgule )
Nous nous intéresserons à trois ensembles de nombres :
– les entiers naturels { 0, 1, 2, 3, … }
– les entiers relatifs { …, -2, -1, 0, 1, 2, 3, … }
– les nombres à virgule
2.2 ) Base, rang et poids
La BASE d’un système de numération est la quantité de symboles différents
qu’utilise ce système.
En base 10, les symboles disponibles sont {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.
Chaque chiffre a un POIDS selon son RANG. Ainsi dans le nombre à virgule
9486,25 ‘9’ est le chiffre des milliers, de poids 103, etc.
rang Poids
3 Millier 103 = 1000
2 Centaine 102 = 100
1 Dizaine 101 = 10
0 Unité 100 = 1
-1 Dixième 10–1 = 0,1
-2 Centième 10–2 = 0,01
Cours Numération [Link]
NUMERATION
3/18
2.3 ) Représentation polynomiale
Tout nombre en base 10 peut s’écrire sous la forme d’un polynôme :
Soit N, un nombre entier de n chiffres N = a n −1 a n − 2 .....a 2 a1 a 0
n −1
N = ∑ ai × B i Avec i : rang du chiffre B : base de numération
i =0
ai : chiffre compris entre 0 et 9
Ainsi la décomposition polynomiale de 4201,3 est :
4201,3 = a3 · 103 + a2 · 102 + a1 · 101 + a0 · 100 + a-1 · 10-1
avec a3 = 4, a2 = 2, a1 = 0, a0 = 1, et a-1 = 3.
Exercice :
Donner la représentation polynomiale de N = 5 670 220
On donne a7 = 3, a4 = 2, les autres chiffres étant nuls. Que vaut N ?
3 ) Les codes binaires pondérés
3.1 ) Codage des entiers naturels
Il s’agit des nombres entiers positifs à partir de 0 : { 0, 1, 2, 3, … }.
3.1.1 ) Le système binaire naturel
En base 2, les symboles disponibles sont {0,1}.
L’élément le plus simple est le BINARY DIGIT, appelé communément le BIT.
Il ne prend que les deux valeurs 0 et 1.
La représentation usuelle en programmation est sur 8 bits, aussi appelé octet.
Le poids de chaque chiffre est alors compris entre 27 et 20 :
27 26 25 24 23 22 21 20
128 64 32 16 8 4 2 1
Le bit de gauche est le MSB : Most Significant Bit, bit de poids fort
Celui de droite est le LSB : Least Significant Bit, bit de poids faible.
Ces huit bits forment un OCTET : Byte en anglais.
Avec un octet, on peut coder des entiers naturels de 0 à 255.
Cours Numération [Link]
NUMERATION
4/18
En base B avec n chiffres, on peut écrire B n nombres différents de 0 à B n − 1
Selon l’environnement de travail utilisé (programmation en Assembleur, en
Basic, en langage C, …) plusieurs notations existent pour identifier un nombre
écrit en base 2 :
0011 1001(2) = %00111001 = 00111001B
Exercice : Compléter le tableau
base 10 Binaire naturel sur 8 bits
0 %0000 0000
1
2
3
4
Remarque :
5 Avec 8 bits ,
6 La valeur
7 maxi est
8 255.
9
256 et plus
10 s’écrivent
11 alors avec
12 un 9e bit à 1
13 ( appelé
14 aussi bit de
retenue )
15
16 %0001 0000
17
32
64
127
128
129
255 %1111 1111
3.1.2 ) Le système octal
L’octal est la base 8.
Les symboles disponibles sont {0, 1, 2, 3, 4, 5, 6, 7}.
Cours Numération [Link]
NUMERATION
5/18
Dans ce système, le poids est une puissance de 8.
Exemple : N = 6548(8)
N = 6 × 83 + 5 × 82 + 4 × 81 + 8 × 80
N = 3432(10)
Pour reconnaître un nombre en octal, plusieurs notations existent :
175(8) = @175 = 175Q = 0175
Dans la pratique, ce système est rarement rencontré.
3.1.3 ) Le système hexadécimal
Le système hexadécimal est la base 16.
Les symboles disponibles sont {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}.
Les lettres A à F correspondent aux nombres 10 à 15 en base 10.
Dans ce système, le poids est une puissance de 16.
Exemple : N = AC53(16)
N = A × 16 3 + C × 16 2 + 5 × 161 + 3 × 16 0
N = 10 × 16 3 + 12 × 16 2 + 5 × 161 + 3 × 16 0
N = 44115(10)
Selon l’environnement de travail utilisé (programmation en assembleur, en
basic, en C, …), plusieurs notations existent pour identifier un nombre écrit en
base 16 :
F6B1(16) = $F6B1 = F6B1H = 0xF6B1
Exercice :
N = F5D3(16) =
N = 1F0B(16) =
N = 10 × 16 3 + 12 × 16 2 + 5 × 161 + 3 × 16 0 =
3.1.4 ) Le BCD
Le BCD (Binary Coded Decimal) est un système intermédiaire entre la base 10
et le binaire : chaque chiffre de la base 10 est codé sur 4 bits.
Exemple : 9847(10) s’écrit 1001 1000 0100 0111(BCD).
Les codes binaires compris entre 1010(2) et 1111(2) n’existent pas en BCD.
Cours Numération [Link]
NUMERATION
6/18
Exercice :
Dans un automate programmable industriel, la date et l’heure sont disponibles
en mémoire au format BCD.
Le jour est écrit sur 4 octets selon le format JJMMAAAA.
L’heure est sur 3 octets selon le format HHMMSS.
Que contiendrait ces 7 octets à l’instant présent ?
3.1.5 ) Changements de base
[Link] ) Tableau de correspondance
Le tableau des correspondances entre les quatre principaux systèmes, décimal /
binaire / hexadécimal / BCD, est à connaître parfaitement.
Base 10 Binaire (base 2 ) Hexadécimal (base 16 ) BCD
0 %0000 0000 $00 0000 0000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 %0001 0000 $10 %0001 0110
17
Cours Numération [Link]
NUMERATION
7/18
[Link] ) Conversion du décimal vers une autre base
Un nombre N étant donné en base 10, comment trouver son écriture dans une
base B quelconque ? Les deux méthodes proposées effectuent des divisions
euclidiennes successives.
Première méthode ( par soustraction ) : du poids fort vers le poids faible
Nous allons convertir N = 3786(10) en hexadécimal (base 16).
Le première division est par la puissance de 16 la plus élevée présente dans N.
La plus grande puissance de 16 contenue dans N est 162.
En effet, 162 = 256 < N et 163 = 4096 > N.
La division euclidienne de N par 162 montre que N = 14 × 16 2 + 202 .
Il reste 202.
La division euclidienne du reste précédent par 161 montre que
202 = 12 × 161 + 10 .
En résumé, nous avons N = 14 × 16 2 + 12 × 161 + 10 × 16 0 ,
Ou encore N = E × 16 2 + C × 161 + A × 16 0 ,
Donc N = ECA(16)
Deuxième méthode ( par division ) : du poids faible vers le poids fort
Nous allons à nouveau convertir N = (3786)10 en hexadécimal (base 16).
Ici, nous enchaînons les divisions par 16.
Après trois divisions successives par 16, le quotient est
inférieur au diviseur donc on arrête les divisions.
Il vient :
N = 14 × 16 2 + 12 × 161 + 10 × 16 0 ,
Donc N = ECA(16)
Exercice :
a) traduire en hexadécimal 41, 73, 625, 1028 et 23222
b) ramener en base 10 les nombres $23, $100, $A010, $BC00, $FE00
Cours Numération [Link]
NUMERATION
8/18
[Link] ) Autres conversions
Les conversions entre bases binaires, octales et B= 2 k 2
hexadécimales se font directement de droite à gauche par codage de chaque chiffre
de la base B en binaire
paquets de 3 ou 4 bits. sur k bits
conversion d’octal à binaire : @57 = %00101111 2 B= 2 k
Mise en forme : Puces et
numéros
conversion de binaire à octal : %10111100 = @274 regroupement de k bits
conversion d’hexadécimal en binaire : $FC = %11111100 écrit en base B
conversion de binaire en hexadécimal : %00111011 = $3B
Pour s’entraîner aux conversions, voir les exercices page 8 du livre
ELECTRONIQUE NUMERIQUE
3.2 ) Codage des entiers relatifs
Il s’agit des nombres entiers signés ( binaire signé ).
3.2.1 ) Le complément à deux ( CPL2 ) et le binaire signé
Pour coder les entier relatifs, on opère comme suit
Soit N, un nombre entier relatif de n bits N = a n −1 a n − 2 .....a 2 a1 a 0
Son codage en binaire signé répond à la relation
n −2
N = − a n −1 × 2 n −1 + ∑ a i × 2i Compléter le tableau
i =0
base 10 Binaire signé sur 8 bits Hexadécimal signé sur 2 chiffres
-128 1000 0000(BS) $80(HS)
-127
-3
-2
-1
0 0000 0000(BS) 00(HS)
1
2
3
127 0111 1111(BS) 7F(HS)
Cours Numération [Link]
NUMERATION
9/18
Le bit de poids fort renseigne sur le signe du nombre : c’est le BIT DE SIGNE.
Il est à 1 pour les nombres négatifs.
Exercice
Un entier signé codé sur un octet (8 bits) peut prendre des valeurs entre –128
(80(HS).) et 127 (7F(HS).).
Quelles seront les valeurs possibles sur deux octets (16 bits) ?
Et sur quatre octets (32 bits) ?
Pour passer de N(BS) à -N(BS) et réciproquement, on peut utliser la méthode du
COMPLEMENT A 2 (CPL2).
Chercher le CPL2 d’un nombre binaire signé revient à changer son signe :
CPL2[+N(BS)]=–N(BS) CPL2[-N(BS)]=+N(BS) → –[–N(BS)]=+N(BS)
Deux opérations sont nécessaires :
– Complémenter tous les bits (1 ↔ 0)
– Ajouter 1 (addition en binaire)
Exemple : recherche du codage hexadécimal signé de (–17)
Le codage binaire signé de +17 est 0001 0001(BS)…..
Son complément bit à bit est %1110 1110.
On ajoute 1 : %1110 1110 + %0000 0001 = %1110 1111.
Résultat : –17 = 1110 1111(BS). = EF(HS).
Ce codage a la propriété d’être cyclique.
Dernière propriété du codage CPL2 : il permet l’addition d’entiers signés (voir
plus loin).
Exercice : vérifiez que le codage hexadécimal signé de (–17) = EF(HS). est bien
(+17)
Cours Numération [Link]
NUMERATION
10/18
3.2.2 ) Addition et soustraction d’entiers relatifs
Sous réserve de dépassement de capacité, l’addition d’entiers signés est
immédiate si les nombres négatifs sont codés en CPL2.
La soustraction consiste à ajouter le CPL2 du nombre.
Le bit de signe renseigne sur la polarité du résultat.
(+17) = 0001 0001 ( BS)
– Addition de deux nombres positifs + ( +12) = 0000 1100 ( BS)
= (+29) = 0001 1101 ( BS)
– Addition de deux nombres (+17) = 0001 0001 ( BS)
de signes contraires + ( −12) = 1111 0100 ( BS)
= (+29) = 0000 0101 ( BS)
(+17) = 0001 0001 ( BS)
+ ( −33) = 1101 1111 ( BS)
(-16) = 1111 0000
– Addition de deux nombres négatifs ( −12) = 1111 0100 ( BS)
+ ( −33) = 1101 1111 ( BS)
= (−45) = 1101 0011 ( BS)
Pour s’entraîner au CPL2, voir les exercices 8, 9 et 10, page 8 du livre
ELECTRONIQUE NUMERIQUE
Cours Numération [Link]
NUMERATION
11/18
3.2.3 ) Multiplication et division
L’opération (X) · (Y) entre deux entiers positifs se
pose comme une multiplication traditionnelle en base
10, avec les règles suivantes :
– 0·0=0
– 0·1=0
– 1·0=0
– 1·1=1
Pour des entiers négatifs, il sera nécessaire de les changer de signes avant
d’effectuer l’opération et, le cas échéant, de prendre le CPL2 du résultat.
La division est identique à une division euclidienne entre
deux entiers positifs en base 10.
Pour des entiers négatifs, l’approche est similaire à celle
de la multiplication. Il est nécessaire de les changer de
signe et, selon les cas, de prendre le CPL2 du résultat.
Cours Numération [Link]
NUMERATION
12/18
3.3 ) Codage des nombres à virgule
3.3.1 ) Virgule flottante
Les nombres à virgule sont décomposés en une mantisse et un exposant.
Exemples en base 10 :
72 = 0,72 · 102 mantisse 0,72 exposant 2
0,03 = 0,3 · 10–1 mantisse 0,3 exposant négatif –1
3
–250 = –0,25 · 10 mantisse négative –0,25 exposant 3
La représentation binaire des nombres à virgule est très variable d’un
environnement de programmation à l’autre. Pour information, voici la
représentation sur 4 octets en ANSI C du type Float :
- 1bit de signe de la mantisse
- 23 bits de mantisse
- 1 bit de signe de l’exposant
- 7 bits d’exposant
Avec ce codage, les valeurs extrêmes sont approximativement ± 3,4 · 10 ±38
3.3.2 ) Nombre fractionnaires
Nous nous intéressons ici au codage des nombres à virgule compris entre 0 et 1
(0 < N < 1 ), tels que les mantisses vues précédemment.
En base 10, nous savons décomposer un tel nombre et le mettre sous forme de
fraction.
8273
Exemple: N= 0,8273 = 8 × 10 −1 + 2 × 10 − 2 + 7 × 10 −3 + 3 × 10 − 4 =
10000
Plus généralement, dans une base B quelconque :
Soit N = 0, a1 a 2 a 3 .....a n (B)
n
La partie fractionaire est égale à ∑a i × B −i
i =1
Où ai est un chiffre tel que ° 0 ≤ a i ≤ B − 1
11
Ainsi en base 2: N= 0,1011(2) = 1 × 2 −1 + 0 × 2 − 2 + 1 × 2 −3 + 1 × 2 − 4 = = 0,6875
16
Cours Numération [Link]
NUMERATION
13/18
Comment convertir un nombre fractionnaire de la base 10 à la base B ?
Avec des nombres entiers, nous avions procédé par divisions successives.
Ici, nous opérerons par multiplications successives pour faire apparaître les
éléments ai.
Exemple : Convertir N = 0,72145(10) en hexadécimal sur 4 octets
0,72145 × 16 = 1l,5432 → al = B
0,5432 × 16 = 8,6912 →a2 =8
0,6912 × 16 = 1l,0592 →a3 = B
0,0592 × 16 = 0,9472 →a4 = 0
0,9472 × 16 = 15,1552 → a5 = F
0,1552 × 16 = 2,4832 → a6 = 2
0,4832 × 16 = 7,7312 →a7 = 7
0,7312 × 16 = 1l,6992 → a8 = B
$B8B0F27B 3098604155
N = 0,B8B0F27B(16) = = = 0,72144999
$100000000 168
Exercice
1) Convertir en binaire sur 8 bits des nombres fractionnaires
N= 0,7
N=0,17
2) N = 0,72145(10) en hexadécimal sur 4 octets
2) Convertir en décimal le nombre fractionnaire N=0,243F6A8A(16)
Cours Numération [Link]
NUMERATION
14/18
4 ) Autres codes usuels
4.1 ) Le code GRAY
Le code binaire que nous avons vu jusqu’à maintenant s’appelle code binaire
naturel. Il existe de nombreux autres codes dont le code GRAY ( code binaire
réfléchi ).
Dans les conversions d’une grandeur analogique (par exemple la position d’un
axe d’un moteur) en une grandeur numérique on a besoin d’un code dans lequel
les grandeurs successives ne diffèrent que d’un bit. Cela évite des erreurs de
détections. Ainsi, au passage de 7 à 8, les quatre bits changent. S’ils ne changent
pas en même temps, on détectera des valeurs intermédiaires erronées :
0111→ 0110 → 0100 → 0000 → 1000
Binaire entier GRAY
B3 B2 B1 B0 G3 G2 G1 G 0
0000 0 0000
0001 1 0001
0010 2 0011
0011 3 0010
0100 4 0110
0101 5 0111
0110 6 0101
0111 7 0100
1000 8 1100
1001 9 1101
1010 10 1111
1011 11 1110
1100 12 1010
1101 13 1011
1110 14 1001
1111 15 1000
10000 16 11000
Le code GRAY est aussi appelé code binaire réfléchi : en effet, de nombreuses
symétries horizontales apparaissent dans le tableau.
Pour construire une suite de nombres en code GRAY, il suffit de remarquer que
pour obtenir la première colonne du tableau (G0), nous avons écrit un fois 0
deux fois 1 deux fois 0 … et faire une observation similaire pour G1, …( Axes
de symétries )
Cours Numération [Link]
NUMERATION
15/18
Exercices :
a) Combien de cercles sur ce codeur de
position angulaire absolu ?
b) Conversion de code binaire vers code Gray :
– Exprimer G3 en fonction de B3
– Exprimer G2 en fonction B3 et B2
– Exprimer G1 en fonction B2 et B1
– Exprimer G0 en fonction B1 et B0
c) Conversion de code Gray vers code binaire :
– Exprimer B3en fonction de G3
– Exprimer B2 en fonction B3 et G2
– Exprimer B1en fonction B2 et G1
– Exprimer B0 en fonction B1 et G0
Cours Numération [Link]
NUMERATION
16/18
4.2 ) Le code ASCII
Pour la mémorisation, l’édition et/ou la transmission de textes, il est nécessaire
de pouvoir aussi coder sous forme binaire des caractères tels que les lettres de
l’alphabet, la ponctuation, des symboles, des instructions de changement de
ligne, de « retour chariot », etc.
Le code ASCII (American Standard Code for Information Interchange) a été
adopté en Informatique.
Vous en trouverez un extrait p. 148 du livre ELECTRONIQUE NUMERIQUE.
Exercice :
Donner les codes ASCII correspondants au message « Hello world ! » .
caractères H e l l o w o r l d ! CR LF
Code ASCII
Cours Numération [Link]
NUMERATION
17/18
Liste des codes ASCII
(d’après [Link])
codes étendus
Cours Numération [Link]
NUMERATION
18/18
4.3 ) Les codes à détection d’erreur
Ces codes permettent de détecter, et pour certains même de corriger des erreurs
dues à des perturbations dans la transmission des données, le stockage, etc.
La technique de codage la plus simple consiste à transmettre avec chaque octet
un neuvième bit, le BIT DE PARITÉ.
Dans le cas de la parité paire (Even Parity), ce neuvième bit est tel que la
somme des bits à 1 transmis est un nombre pair. Ce sera l’inverse pour la parité
impaire.
Soient à transmettre les caractères M et I, codés en ASCII %0100 1101 et
%0100 1001. Les bits de parité seront respectivement 0 et 1.
Une erreur simple sera ainsi détectée par le destinataire qui demandera alors une
retransmission des données.
Exercice :
Reprendre l’exercice sur le code ASCII, et calculer le bit de parité paire pour
chaque caractère.
4.4 ) Les codes barres
Ces dernières années est apparu un système optique de codage numérique appelé
CODE BARRE.
Parmi les codes existants, le code EAN 13 (European Article Number) est
utilisé sur tous les produits de grande consommation. Il est décrit dans le
MEMOTECH 4ème édition page 4.40 : un trait fin code 1, un espace fin code 0,
un système de détection des erreurs est intégré dans les 13 caractères.
Cours Numération [Link]