Médaille
N°1 pour apprendre & réviser du collège au lycée.
Codage de l'information

Déjà plus de

1 million

d'inscrits !

Introduction :

Nous l’avons vu dans le cours précédent, les conversions des signaux prennent une place prépondérante dans une chaîne d’information. Ainsi, pour comprendre le processus de numérisation d’une information, il nous faut comprendre comment fonctionne le codage d’une information.

Les ordinateurs, constitués de circuits logiques, ne connaissent que le système binaire, en base 22.
Dans ce cours, nous allons découvrir ce qu’est une base de numération et étudier celle de 22 et 1616, omniprésentes en informatique. Nous allons aussi apprendre comment passer de l’une à l’autre.

Bases de numération

Nous sommes habitués à compter en base 1010, notamment parce que l’homme a 1010 doigts et que c’est pratique, tout de même, de compter sur ses doigts !
L’ordinateur, lui, n’a pas de doigts, mais des circuits logiques qui ne connaissent que 22 chiffres (00 ou 11).

  • En réalité, il existe une infinité de bases pour compter.

D’ailleurs, vous connaissez déjà la base 6060 : elle sert pour les angles (un tour complet de 360°360\degree) ou, de manière approchée, pour la mesure du temps (1 h=60 min=60×60 s1\ \text{h}=60\ \text{min}=60\times60\ \text{s}).

  • Pour faciliter la compréhension, nous ne traiterons que les nombres entiers, sans partie décimale.
bannière à retenir

À retenir

Considérons une base ss (avec ss entier 1>1). Alors l’écriture générale d’un nombre de (n+1)(n+1) chiffres est, dans cette base :

anan1a1a0=an×sn+an1×sn1++a1×s1+a0×s0=i=0nai×si\begin{aligned} \red{an} \blue{a{n-1}}… \purple{a1} \green{a0} &= \red{an} \times s^n + \blue{a{n-1}} \times s^{n-1} + … + \purple{a1} \times s^1+ \green{a0} \times s^0 \ &= \displaystyle\sum{i=0}^n ai\times s^i \end{aligned}

Avec, pour tout ii de 00 à nn, aia_i un chiffre de la base ss.

L’écriture littérale ci-dessus peut sembler complexe.
Mais regardons ce que cela donne en base 1010, car on sait facilement développer un nombre entier en puissances de 1010.

bannière exemple

Exemple

7065=7×1000+0×100+6×10+5×1=7×103+0×102+6×101+5×100\begin{aligned} \red7\,\blue 0\purple 6\green 5&=7\times1\,000+0\times100+6\times10+5\times1 \ &=\red7\times10^3+\blue0\times10^2+\purple6\times10^1+\green5\times10^0 \end{aligned}

Cela correspond très exactement à la formule donnée plus haut, avec :

  • s=10s=10 ;
  • n=3n=3 ;
  • a3=7a_3=7 ;
  • a2=0a_2=0 ;
  • a1=6a_1=6 ;
  • a0=5a_0=5.
  • C’est évident en base 1010, et c’est la même chose en base quelconque ss. Avec un peu de pratique, cela vous deviendra donc tout aussi évident !
bannière à retenir

À retenir

Lorsqu’on manipule des nombres dans des bases différentes et qu’il peut y avoir ambiguïté, il est important de préciser dans quelle base ces nombres sont exprimés.

  • Nous choisissons ici de mettre la base en indice, après le nombre concerné : NsN_s.
  • On considère qu’un nombre donné sans précision supplémentaire (sans indice) est exprimé en base 1010.

Base binaire et base hexadécimale

Étudions tout d’abord la base utilisée par les ordinateurs : la base binaire.

Nombre binaire

bannière definition

Définition

Nombre binaire :

Un nombre binaire s’écrit avec 22 chiffres, 00 et 11.

Dans une base décimale, pour passer d’un nombre à un autre, nous ajoutons 11. Lorsque nous atteignons 99, nous repartons de 00 pour les unités et incrémentons la dizaine (et ainsi de suite pour les centaines, milliers, etc.) :

 009  +1  010 099  +1  100\begin{aligned} \ \textcolor{#808080} 0\textcolor{#808080}0 9\ &^{\underrightarrow{\ {+1}\ }}\ \textcolor{#808080}0 \red 1 \green 0 \ \ \textcolor{#808080} 0 99\ &^{\underrightarrow{\ {+1}\ }}\ \red1\green0\green0 \end{aligned}

  • Il en va de même en base binaire, sauf que nous ne pouvons aller au-delà de 11 :

0002  +1  0012  +1  0102  +1  0112  +1  1002  +1  1012 \textcolor{#808080}0 \textcolor{#808080}0 0{\tiny 2}\ ^{\underrightarrow{\ {+1}\ }}\ \textcolor{#808080}0 \textcolor{#808080} 0 \red 1{\tiny 2} \ ^{\underrightarrow{\ {+1}\ }}\ \textcolor{#808080}0 \red1 \green0{\tiny 2} \ ^{\underrightarrow{\ {+1}\ }}\ \textcolor{#808080}0 1 \red1{\tiny 2}\ ^{\underrightarrow{\ {+1}\ }}\ \red1 \green0 \green0{\tiny 2} \ ^{\underrightarrow{\ {+1}\ }}\ 10\red1{\tiny 2}\ …

bannière attention

Attention

Nous appellerons la base binaire ci-dessus décrite « naturelle ». Il existe d’autres codes binaires, que nous découvrirons plus loin dans ce cours.

Base binaire et bit

bannière rappel

Rappel

11 bit (binary digit) ne peut prendre que 22 valeurs : 00 ou 11.

  • D'une manière générale, avec NN bits, on représente 2N2^N nombres.
bannière à retenir

À retenir

Généralement, on regroupe les bits par 44.

  • 11 quartet est un groupe de 44 bits.
  • 11 octet (o\text{o}) est un groupe de 88 bits.
  • 11 mot est un groupe de 1616 bits.
  • 11 double mot est un groupe de 3232 bits.

On identifie les premier et dernier bits par des noms :

  • celui le plus à droite est le bit de poids faible, noté LSB\text{LSB} (Least Significant Bit) ;
  • celui le plus à gauche est le bit de poids fort, noté MSB\text{MSB} (Most Significant Bit) ;

première sciences de l’ingénieur codage de l’information bit octet quartet mot double mot poids fort poids faible

bannière attention

Attention

Pour ôter toute ambiguïté sur les préfixes des multiples d’octets (1 kilo=10001\ \text{kilo}=1\,000 n’étant pas une puissance de 22), il est désormais préconisé, dans le Système international, d’utiliser les préfixes :

  • kibioctets (Kio\text{Kio}) pour 210=1024 o2^{10}=1\,024\ \text{o} ;
  • mébioctets (Mio\text{Mio}) pour 220=1024 Kio=1048576 o2^{20}=1\,024\ \text{Kio}=1\,048\,576\ \text{o} ;
  • et ainsi de suite pour le gibioctets (Gio\text{Gio}), le tébioctets (Tio\text{Tio}), etc.

Donnons maintenant un tableau d’équivalences pour des nombres codés en 44 bits (soit 1616 valeurs) :

première sciences de l’ingénieur codage de l’information

Codes particuliers

  • Code DCB

Le code DCB (« décimal codé binaire ») permet une relation assez directe entre la base décimale et la base binaire.

bannière à retenir

À retenir

Un nombre décimal se décompose en unités, dizaines, centaines, milliers, etc.

  • Avec le code DCB, chaque chiffre décimal est représenté par un quartet.

Un nombre NN codé en DCB sera noté : NDCBN_{\tiny{\text{DCB}}}.

bannière exemple

Exemple

Codons 70657\,065 en DCB :

7 0111 0 0000 6 0110 5 0101 \underbrace{\large{\red {7}}}{\large{\red{\ 0111\ }}} \underbrace{\large {\blue{0}}}{\large{\blue{\ 0000\ }}} \underbrace{\large {\purple{6}}}{\large{\purple{\ 0110\ }}} \underbrace{\large {\green{5}}}{\large{\green{\ 0101\ }}}

Ainsi : 706510=0111000001100101DCB7\,065{\tiny 10}=0111\,0000\,0110\,0101{\tiny{\text{DCB}}}.

Nous voyons tout de suite un désavantage de ce code : il faut plus de bits pour représenter un même nombre décimal. En effet, pour coder, par exemple, 1212, il faut 11 octet en DCB quand 11 quartet suffit en code binaire naturel.

  • Toutefois, le DCB est très répandu en électronique, notamment lorsqu’il s’agit d’afficher des valeurs numériques : il permet un traitement simplifié et n’a pas besoin de l’interface complexe que nécessiterait l’utilisation de codes binaires naturels.
  • Code binaire réfléchi

Nous l’avons vu plus haut, dans le code binaire naturel, on ajoute 11 pour passer d’un nombre à un autre.

bannière à retenir

À retenir

Le code binaire réfléchi, ou code Gray, en diffère en ce qu’il interdit la modification de plus de 11 chiffre lors de ce passage.

  • Lorsqu’un nombre est incrémenté d’une unité, un seul bit change.
  • Changer un seul chiffre à la fois permet d’éviter toute valeur intermédiaire fausse.
bannière exemple

Exemple

En code binaire naturel, on a : 001  +1  0100\red0\purple1\ ^{\underrightarrow{\ {+1}\ }}\ 0\purple1\red0. Nous voyons que les 22 derniers chiffres changent.

  • Si, dans un circuit logique, les 22 chiffres ne sont pas modifiés exactement au même moment, alors il y aura un instant où la valeur sera fausse (000000 ou 011011).

En code binaire réfléchi, on a : 001  +1  0110\red0 1\ ^{\underrightarrow{\ {+1}\ }}\ 0\purple1 1. Ici, seul le deuxième chiffre change.

  • Il n’y a donc aucune possibilité de valeur intermédiaire.

Nombre hexadécimal

Il nous est compliqué de manipuler la base binaire. Et le passage de la base binaire à la base décimale n’est pas directe.

  • Une autre base s’est donc avérée nécessaire, permettant d’avoir une correspondance plus directe avec la base binaire : la base hexadécimale, soit une base de 1616.
bannière definition

Définition

Nombre hexadécimal :

Un nombre hexadécimal s’écrit avec 1616 chiffres, de 00 et 99, puis de A\text{A} à F\text{F}.

Ici aussi, pour passer d’un nombre au suivant, on ajoute 11 :

00  +1  01  09  +1  0A  +1  0 0F  +1  10  +1  11  1F  +1  20 00\ ^{\underrightarrow{\ {+1}\ }}\ 01\ …\ 09\ ^{\underrightarrow{\ {+1}\ }}\ 0 \text{A}\ ^{\underrightarrow{\ {+1}\ }}\ 0 \text{B}\ …\ 0 \text{F}\ ^{\underrightarrow{\ {+1}\ }}\ 10\ ^{\underrightarrow{\ {+1}\ }}\ 11\ …\ 1 \text{F}\ ^{\underrightarrow{\ {+1}\ }}\ 20\ …

Conversion entre bases

Nous savons maintenant ce que sont les bases de numération. Ce qui nous intéresse tout particulièrement, c’est la façon de passer d’une base à une autre, c’est-à-dire de convertir une valeur donnée dans une base en une valeur exprimée dans une base différente.

Conversion binaire \leftrightarrow décimal

  • Conversion binaire \rightarrow décimal

Dans la première partie, nous avons vu qu’un nombre en base ss pouvait s’exprimer sous la forme d’une somme de puissances de ss.

  • Cela fonctionne donc en base 22.
bannière à retenir

À retenir

Pour convertir un nombre binaire en un nombre décimal, il suffit d’écrire le nombre binaire sous la forme d’une somme de puissances de 22, puis de faire l’opération.

bannière exemple

Exemple

10112=1×23+0×22+1×21+1×20=1110\begin{aligned} \red 1 \blue 0\purple 1\green1{\tiny 2}&=\red 1\times2^3+\blue 0\times2^2+\purple1\times2^1+\green1\times2^0 \ &=11{\tiny 10} \end{aligned}

  • Conversion décimal \rightarrow binaire
bannière à retenir

À retenir

Pour convertir un nombre décimal en un nombre binaire, il faut réaliser une succession de divisions euclidiennes par 22, jusqu’à obtenir un quotient égal à 00.
Le nombre binaire sera la succession des restes, en partant de celui de la dernière division, jusqu’à celui de la première. Autrement dit :

  • le bit de poids faible sera le reste de la première division euclidienne ;
  • le bit de poids fort sera le reste de la dernière division euclidienne.
bannière exemple

Exemple

Exprimons en binaire le nombre décimal 7777.

première sciences de l’ingénieur codage de l’information

  • Ainsi : 7710=1001101277{\tiny 10}=100\,1101{\tiny 2}

Conversion hexadécimal \leftrightarrow binaire

Nous l’avons dit plus haut : nous faisons appel à la base 1616 car les correspondances hexadécimal \leftrightarrow binaire sont plus directes.

  • Les conversions, dans un sens comme dans l’autre, se font donc de manière simple.

Regardons déjà le tableau d’équivalences entre les 1616 chiffres utilisés en hexadécimal et leur valeur binaire (avec 44 bits, puisqu’il faut 44 bits pour coder 24=162^4=16 nombres) :

première sciences de l’ingénieur codage de l’information

  • Conversion hexadécimal \rightarrow binaire
bannière à retenir

À retenir

Pour convertir un nombre hexadécimal en un nombre binaire, il suffit de donner la correspondance en binaire, sur un quartet, de chaque chiffre.

bannière exemple

Exemple

Exprimons en binaire le nombre hexadécimal 3DF73 \text{D} \text{F} 7.

3 0011 D 1101 F 1111 7 0111 \underbrace{\large{\red {3}}}{\large{\red{\ 0011\ }}} \underbrace{\large {\blue{\text{D}}}}{\large{\blue{\ 1101\ }}} \underbrace{\large {\purple{\text{F}}}}{\large{\purple{\ 1111\ }}} \underbrace{\large {\green{7}}}{\large{\green{\ 011 1\ }}}

  • Ainsi : 3DF716=001111011111011123 \text{D} \text{F} 7{\tiny 16}=0011\,1101\,1111\,0111{\tiny 2}
  • Conversion binaire \rightarrow hexadécimal
bannière à retenir

À retenir

Pour convertir un nombre binaire en un nombre hexadécimal, il faut d’abord grouper le nombre binaire par quartets, en partant du bit de poids faible. Ensuite, il suffit de donner la correspondance de chaque quartet en hexadécimal.

bannière exemple

Exemple

Exprimons en hexadécimal le nombre binaire 1111011111011111110111110111.
On regroupe par quartet, en ajoutant deux 00 sur les deux bits les plus à gauche pour compléter le dernier quartet : 00111101111101110011\,1101\,1111\,0111.

Puis on met les correspondances :

00113 1101D 1111F 01117\underbrace{\large{\red {0011}}}{\large{\red{3}}}\ \underbrace{\large {\blue{1101}}}{\large{\blue{\text D}}}\ \underbrace{\large {\purple{1111}}}{\large{\purple{\text F}}}\ \underbrace{\large {\green{0111}}}{\large{\green{7}}}

  • Ainsi : 00111101111101112=3DF7160011\,1101\,1111\,0111{\tiny 2}=3 \text{D} \text{F} 7{\tiny 16}

Conversion hexadécimal \leftrightarrow décimal

Pour commencer, donnons le tableau d’équivalences des 1616 premiers nombres, soit de 00 à F\text{F}, en décimal :

Hexadécimal 0000 0101 0202 0303 0404 0505 0606 0707 0808 0909 0A0\text A 0B0\text B 0C0\text C 0D0\text D 0E0\text E 0F0\text F
Décimal 0000 0101 0202 0303 0404 0505 0606 0707 0808 0909 1010 1111 1212 1313 1414 1515
  • Conversion hexadécimal \rightarrow décimal

Nous utilisons la même propriété que pour la conversion binaire \rightarrow décimal.

bannière à retenir

À retenir

Pour convertir un nombre hexadécimal en un nombre décimal, il suffit d’écrire le nombre hexadécimal sous la forme d’une somme de puissances de 1616, puis de faire l’opération.

  • Il conviendra bien sûr, pour les lettres, de les convertir dans le nombre décimal correspondant.
bannière exemple

Exemple

3DF716=3×163+D×162+F×161+7×20=3×163+13×162+15×161+7×20=15863\begin{aligned} \red 3 \blue {\text{D}}\purple {\text{F}}\green7_{\tiny 16}&=\red 3\times16^3+\blue {D}\times16^2+\purple{F}\times16^1+\green7\times2^0 \ &=\red 3\times16^3+\blue {13}\times16^2+\purple{15}\times16^1+\green7\times2^0 \ &=15\,863 \end{aligned}

  • Conversion décimal \rightarrow hexadécimal
bannière à retenir

À retenir

Pour convertir un nombre décimal en un nombre hexadécimal, il faut réaliser une succession de divisions euclidiennes par 1616, jusqu’à obtenir un quotient égal à 00.
Le nombre hexadécimal sera la succession des restes, en partant de celui de la dernière division, jusqu’à celui de la première.

  • Il conviendra bien sûr, si le reste est supérieur ou égal à 1010, de le convertir dans la lettre correspondante.
bannière exemple

Exemple

Exprimons en hexadécimal le nombre décimal 7777.

Alt texte

  • Ainsi : 7710=4D1677{\tiny 10}=4 \text{D}{\tiny 16}
bannière astuce

Astuce

Diviser par 1616, ou calculer les puissances de 1616, peut s’avérer difficile.

  • Ainsi, il est parfois plus simple, lors d’une conversion hexadécimal \rightarrow décimal ou inversement, de convertir d’abord en binaire, avant de passer dans la base voulue.

Conclusion :

Nous venons de voir les bases de numération, tout particulièrement celles qui servent en informatique et en électronique : les bases binaire et hexadécimale.

Avant d’en voir des applications concrètes, grâce aux opérateurs logiques et à l’algèbre de Boole que nous découvrirons dans les cours suivants, donnons un tableau récapitulatif avec les 2121 premières valeurs.

Décimal Hexadécimal Binaire Binaire BCD Binaire réfléchi
00\textcolor{#a4a4a3}{0} 0 00\textcolor{#808080}0 0 00000\textcolor{#808080}{0\,000}0 00000000\textcolor{#808080}{0000}\,0000 00000\textcolor{#808080}{0\,000}0
01\textcolor{#808080}0 1 01\textcolor{#808080}0 1 00001\textcolor{#808080}{0\,000}1 00000001\textcolor{#808080}{0000}\,0001 00001\textcolor{#808080}{0\,000}1
02\textcolor{#808080}0 2 02\textcolor{#808080}0 2 00010\textcolor{#808080}{0\,00}10 00000010\textcolor{#808080}{0000}\,0010 00011\textcolor{#808080}{0\,00}11
03\textcolor{#808080}0 3 03\textcolor{#808080}0 3 00011\textcolor{#808080}{0\,00}11 00000011\textcolor{#808080}{0000}\,0011 00010\textcolor{#808080}{0\,00}10
04\textcolor{#808080}0 4 04\textcolor{#808080}0 4 00100\textcolor{#808080}{0\,0}100 00000100\textcolor{#808080}{0000}\,0100 00110\textcolor{#808080}{0\,0}110
05\textcolor{#808080}0 5 05\textcolor{#808080}0 5 00101\textcolor{#808080}{0\,0}101 00000101\textcolor{#808080}{0000}\,0101 00111\textcolor{#808080}{0\,0}111
06\textcolor{#808080}0 6 06\textcolor{#808080}0 6 00110\textcolor{#808080}{0\,0}110 00000110\textcolor{#808080}{0000}\,0110 00101\textcolor{#808080}{0\,0}101
07\textcolor{#808080}0 7 07\textcolor{#808080}0 7 00111\textcolor{#808080}{0\,0}111 00000111\textcolor{#808080}{0000}\,0111 00100\textcolor{#808080}{0\,0}100
08\textcolor{#808080}0 8 08\textcolor{#808080}0 8 01000\textcolor{#808080}{0\,}1000 00001000\textcolor{#808080}{0000}\,1000 01100\textcolor{#808080}{0\,}1100
09\textcolor{#808080}0 9 09\textcolor{#808080}0 9 01001\textcolor{#808080}{0\,}1001 00001001\textcolor{#808080}{0000}\,1001 01101\textcolor{#808080}{0\,}1101
1010 0A\textcolor{#808080}0 \text A 01010\textcolor{#808080}{0\,}1010 000100000001\,0000 01111\textcolor{#808080}{0\,}1111
1111 0B\textcolor{#808080}0 \text B 01011\textcolor{#808080}{0\,}1011 000100010001\,0001 01110\textcolor{#808080}{0\,}1110
1212 0C\textcolor{#808080}0 \text C 01100\textcolor{#808080}{0\,}1100 000100100001\,0010 01010\textcolor{#808080}{0\,}1010
1313 0D\textcolor{#808080}0 \text D 01101\textcolor{#808080}{0\,}1101 000100110001\,0011 01011\textcolor{#808080}{0\,}1011
1414 0E\textcolor{#808080}0 \text E 01110\textcolor{#808080}{0\,}1110 000101000001\,0100 01001\textcolor{#808080}{0\,}1001
1515 0F\textcolor{#808080}0 \text F 01111\textcolor{#808080}{0\,}1111 000101010001\,0101 01000\textcolor{#808080}{0\,}1000
1616 1010 100001\,0000 000101100001\,0110 110001\,1000
1717 1111 100011\,0001 000101110001\,0111 110011\,1001
1818 1212 100101\,0010 000110000001\,1000 110111\,1011
1919 1313 100111\,0011 000110010001\,1001 110101\,1010
2020 1414 101001\,0100 001000000010\,0000 111101\,1110