Codage de l'information

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 $2$.
Dans ce cours, nous allons découvrir ce qu’est une base de numération et étudier celle de $2$ et $16$, 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 $10$, notamment parce que l’homme a $10$ 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 $2$ chiffres ($0$ ou $1$).

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

D’ailleurs, vous connaissez déjà la base $60$ : elle sert pour les angles (un tour complet de $360\degree$) ou, de manière approchée, pour la mesure du temps ($1\ \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 $s$ (avec $s$ entier $>1$). Alors l’écriture générale d’un nombre de $(n+1)$ chiffres est, dans cette base :

$$\begin{aligned} \red{a_n} \blue{a_{n-1}}… \purple{a_1} \green{a_0} &= \red{a_n} \times s^n + \blue{a_{n-1}} \times s^{n-1} + … + \purple{a_1} \times s^1+ \green{a_0} \times s^0 \\ &= \displaystyle\sum_{i=0}^n a_i\times s^i \end{aligned}$$

Avec, pour tout $i$ de $0$ à $n$, $a_i$ un chiffre de la base $s$.

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

bannière exemple

Exemple

$$\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=10$ ;
  • $n=3$ ;
  • $a_3=7$ ;
  • $a_2=0$ ;
  • $a_1=6$ ;
  • $a_0=5$.
  • C’est évident en base $10$, et c’est la même chose en base quelconque $s$. 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é : $N_s$.
  • On considère qu’un nombre donné sans précision supplémentaire (sans indice) est exprimé en base $10$.

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 $2$ chiffres, $0$ et $1$.

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

$$\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 $1$ :

$$\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

$1$ bit (binary digit) ne peut prendre que $2$ valeurs : $0$ ou $1$.

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

À retenir

Généralement, on regroupe les bits par $4$.

  • $1$ quartet est un groupe de $4$ bits.
  • $1$ octet ($\text{o}$) est un groupe de $8$ bits.
  • $1$ mot est un groupe de $16$ bits.
  • $1$ double mot est un groupe de $32$ bits.

On identifie les premier et dernier bits par des noms :

  • celui le plus à droite est le bit de poids faible, noté $\text{LSB}$ (Least Significant Bit) ;
  • celui le plus à gauche est le bit de poids fort, noté $\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\ \text{kilo}=1\,000$ n’étant pas une puissance de $2$), il est désormais préconisé, dans le Système international, d’utiliser les préfixes :

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

Donnons maintenant un tableau d’équivalences pour des nombres codés en $4$ bits (soit $16$ 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 $N$ codé en DCB sera noté : $N_{\tiny{\text{DCB}}}$.

bannière exemple

Exemple

Codons $7\,065$ en DCB :

$$\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 : $7\,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, $12$, il faut $1$ octet en DCB quand $1$ 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 $1$ 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 $1$ 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 : $0\red0\purple1\ ^{\underrightarrow{\ {+1}\ }}\ 0\purple1\red0$. Nous voyons que les $2$ derniers chiffres changent.

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

En code binaire réfléchi, on a : $0\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 $16$.
bannière definition

Définition

Nombre hexadécimal :

Un nombre hexadécimal s’écrit avec $16$ chiffres, de $0$ et $9$, puis de $\text{A}$ à $\text{F}$.

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

$$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 $s$ pouvait s’exprimer sous la forme d’une somme de puissances de $s$.

  • Cela fonctionne donc en base $2$.
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 $2$, puis de faire l’opération.

bannière exemple

Exemple

$$\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 $2$, jusqu’à obtenir un quotient égal à $0$.
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 $77$.

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

  • Ainsi : $77_{\tiny 10}=100\,1101_{\tiny 2}$

Conversion hexadécimal $\leftrightarrow$ binaire

Nous l’avons dit plus haut : nous faisons appel à la base $16$ 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 $16$ chiffres utilisés en hexadécimal et leur valeur binaire (avec $4$ bits, puisqu’il faut $4$ bits pour coder $2^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 $3 \text{D} \text{F} 7$.

$$\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 : $3 \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 $11110111110111$.
On regroupe par quartet, en ajoutant deux $0$ sur les deux bits les plus à gauche pour compléter le dernier quartet : $0011\,1101\,1111\,0111$.

Puis on met les correspondances :

$$\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 : $0011\,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 $16$ premiers nombres, soit de $0$ à $\text{F}$, en décimal :

Hexadécimal $00$ $01$ $02$ $03$ $04$ $05$ $06$ $07$ $08$ $09$ $0\text A$ $0\text B$ $0\text C$ $0\text D$ $0\text E$ $0\text F$
Décimal $00$ $01$ $02$ $03$ $04$ $05$ $06$ $07$ $08$ $09$ $10$ $11$ $12$ $13$ $14$ $15$
  • 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 $16$, 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

$$\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 $16$, jusqu’à obtenir un quotient égal à $0$.
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 à $10$, de le convertir dans la lettre correspondante.
bannière exemple

Exemple

Exprimons en hexadécimal le nombre décimal $77$.

Alt texte

  • Ainsi : $77_{\tiny 10}=4 \text{D}_{\tiny 16}$
bannière astuce

Astuce

Diviser par $16$, ou calculer les puissances de $16$, 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 $21$ premières valeurs.

Décimal Hexadécimal Binaire Binaire BCD Binaire réfléchi
$\textcolor{#a4a4a3}{0} 0$ $\textcolor{#808080}0 0$ $\textcolor{#808080}{0\,000}0$ $\textcolor{#808080}{0000}\,0000$ $\textcolor{#808080}{0\,000}0$
$\textcolor{#808080}0 1$ $\textcolor{#808080}0 1$ $\textcolor{#808080}{0\,000}1$ $\textcolor{#808080}{0000}\,0001$ $\textcolor{#808080}{0\,000}1$
$\textcolor{#808080}0 2$ $\textcolor{#808080}0 2$ $\textcolor{#808080}{0\,00}10$ $\textcolor{#808080}{0000}\,0010$ $\textcolor{#808080}{0\,00}11$
$\textcolor{#808080}0 3$ $\textcolor{#808080}0 3$ $\textcolor{#808080}{0\,00}11$ $\textcolor{#808080}{0000}\,0011$ $\textcolor{#808080}{0\,00}10$
$\textcolor{#808080}0 4$ $\textcolor{#808080}0 4$ $\textcolor{#808080}{0\,0}100$ $\textcolor{#808080}{0000}\,0100$ $\textcolor{#808080}{0\,0}110$
$\textcolor{#808080}0 5$ $\textcolor{#808080}0 5$ $\textcolor{#808080}{0\,0}101$ $\textcolor{#808080}{0000}\,0101$ $\textcolor{#808080}{0\,0}111$
$\textcolor{#808080}0 6$ $\textcolor{#808080}0 6$ $\textcolor{#808080}{0\,0}110$ $\textcolor{#808080}{0000}\,0110$ $\textcolor{#808080}{0\,0}101$
$\textcolor{#808080}0 7$ $\textcolor{#808080}0 7$ $\textcolor{#808080}{0\,0}111$ $\textcolor{#808080}{0000}\,0111$ $\textcolor{#808080}{0\,0}100$
$\textcolor{#808080}0 8$ $\textcolor{#808080}0 8$ $\textcolor{#808080}{0\,}1000$ $\textcolor{#808080}{0000}\,1000$ $\textcolor{#808080}{0\,}1100$
$\textcolor{#808080}0 9$ $\textcolor{#808080}0 9$ $\textcolor{#808080}{0\,}1001$ $\textcolor{#808080}{0000}\,1001$ $\textcolor{#808080}{0\,}1101$
$10$ $\textcolor{#808080}0 \text A$ $\textcolor{#808080}{0\,}1010$ $0001\,0000$ $\textcolor{#808080}{0\,}1111$
$11$ $\textcolor{#808080}0 \text B$ $\textcolor{#808080}{0\,}1011$ $0001\,0001$ $\textcolor{#808080}{0\,}1110$
$12$ $\textcolor{#808080}0 \text C$ $\textcolor{#808080}{0\,}1100$ $0001\,0010$ $\textcolor{#808080}{0\,}1010$
$13$ $\textcolor{#808080}0 \text D$ $\textcolor{#808080}{0\,}1101$ $0001\,0011$ $\textcolor{#808080}{0\,}1011$
$14$ $\textcolor{#808080}0 \text E$ $\textcolor{#808080}{0\,}1110$ $0001\,0100$ $\textcolor{#808080}{0\,}1001$
$15$ $\textcolor{#808080}0 \text F$ $\textcolor{#808080}{0\,}1111$ $0001\,0101$ $\textcolor{#808080}{0\,}1000$
$16$ $10$ $1\,0000$ $0001\,0110$ $1\,1000$
$17$ $11$ $1\,0001$ $0001\,0111$ $1\,1001$
$18$ $12$ $1\,0010$ $0001\,1000$ $1\,1011$
$19$ $13$ $1\,0011$ $0001\,1001$ $1\,1010$
$20$ $14$ $1\,0100$ $0010\,0000$ $1\,1110$