DONNEES 2 : CODAGE DES NOMBRES RELATIFS

1. Les entiers naturels
Un ENTIER NATUREL est un nombre entier positif ou nul.
Le nombre de bits à utiliser dépend de la fourchette des nombres que l’on désire utiliser.

Un codage sur n bits pourra permettre de représenter des nombres entiers naturels compris entre \(0\) et \(2^n-1\).

Un ENTIER RELATIF est un entier pouvant être négatif. Il faut donc coder :
  • L’aspect positif ou négatif d’un nombre ;
  • Conserver les règles d’addition usuelles.
L’astuce consiste à utiliser un codage que l’on appelle complément à deux.
Un entier relatif positif ou nul sera représenté en binaire comme un entier naturel, à la seule différence que le bit de poids fort (situé à gauche) représente le signe :
\(0\) représente le signe positif
\(1\) représente le signe négatif
Ainsi, d’une manière générale, le plus grand entier relatif positif codé sur \(n\) bits sera \(2^{(n-1)}-1\).
Un entier relatif négatif sera représenté grâce au codage en complément à deux.
Principe du complément à deux :
  1. Ecrire la valeur absolue du nombre en base 2. Le bit de poids fort doit être égal à 0.
  2. Inverser les bits : les 0 deviennent des 1, et vice-versa. C'est le complément à un.
  3. On ajoute 1 au résultat ; les dépassements sont ignorés.
  1. Ecrire \(19\) en binaire sur 8 bits : \(00010011\).
  2. Ecrire son complément à 1 : \(11101100\).
  3. Ajouter \(1\) : \(11101101\).
Donc \((-19)_{10}=(11101101)_2\) sur 8 bits.
On remarque \((19)_{10}+(-19)_{10}=(00010011)_2+(11101101)_2=(00000000)_2\), avec une retenue de 1 qui est éliminée (puisqu'on reste sur un espace de 8 bits).
2. Les nombres réels
En base \(10\), l’expression \(652,375\) est une manière abrégée d’écrire : $$(652,375)_{10} = 6 \times 10^2+5 \times 10^1+2 \times 10^0+3 \times 10^{-1}+7 \times 10^{-2}+5 \times 10^{-3}$$ Il en va de même pour la base \(2\). Ainsi l’expression \(110,101\) signifie : $$(110,101)_2 = 1 \times 2^2+1 \times 2^1+0 \times 2^0+1 \times 2^{-1}+0 \times 2^{-2}+1 \times 2^{-3} = (6,625)_{10}$$
Convertir de décimal en binaire :
Le passage de base \(10\) en base \(2\) est plus subtil.
Par exemple, convertissons \((1234,347)_{10}\) en base \(2\) :
  1. La partie entière se transforme en binaire comme expliqué précédemment pour les nombres entiers : $$(1234)_{10} = (10011010010)_2$$
  2. La partie décimale se transforme suivant ce schéma :
    $$\begin{eqnarray} & & 0,347 \times 2 = 0,694 \Rightarrow 0,347 = 0,0... \\ \nonumber & & 0,694 \times 2 = 1,388 \Rightarrow 0,347 = 0,01... \\ \nonumber & & 0,388 \times 2 = 0,766\Rightarrow 0,347 = 0,010... \\ \nonumber & & 0,766 \times 2 = 1,552 \Rightarrow 0,347 = 0,0101... \\ \nonumber & & 0,552 \times 2 = 1,104 \Rightarrow 0,347 = 0,01011... \\ \nonumber & & 0,104 \times 2 = 0,208\Rightarrow 0,347 = 0,010110... \\ \nonumber & & 0,208 \times 2 = 0,416 \Rightarrow 0,347 = 0,0101100... \\ \nonumber & & 0,416 \times 2 = 0,832 \Rightarrow 0,347 = 0,01011000... \\ \nonumber & & 0,832 \times 2 = 1,664 \Rightarrow 0,347 = 0,010110001... \\ \nonumber & & 0,664 \times 2 = 1,328 \Rightarrow 0,347 = 0,0101100011... \\ \nonumber \end{eqnarray}$$
    Ainsi de suite jusqu'à la précision souhaitée.
On remarque qu'un nombre à développement fini en base 10 ne l'est pas forcément en base 2 !