Systèmes électroniques
Fermer ×

Représentation binaire

Histoire et principe

Histoire

On attribue le système binaire à Leibniz vers 1700, mais ceci cette version a été contestée par John W. Shirley dans "Binary Numeration before Leibniz".
il y a même une référence aux hexagrammes du Yi Jing (classique des changements) qui peuvent être représentés par un code binaire sur 6 bits (un bit est un chiffre qui vaut 0 ou 1).

Les bases de calcul

En base 10, on utilise les chiffres de 0 à 9 associés à un multiplicateur exprimé par une puissance de 10. En base 2 on utilise les chiffres 0 et 1 associés à un multiplicateur exprimé par une puissance de 2. On pourrait généraliser ce principe à n'importe quelle base de représentation des nombres. Pour des bases supérieures à 10, on utilise des symboles en plus des chiffres de 0 à 9 que l'on appelle digits. En informatique, on utilise également la base 16 qui utilise les digits de 0 à 9 et A à F (majuscule ou minuscule).

Représentation des entiers

On distingue les entiers non signés (ensemble ℕ) et les entiers signés (ensemble ℤ).

Les entiers non signés

En appliquant ce qui vient d'être expliqué précédemment, on peut écrire la relation qui permet d'exprimer un nombre en base 10 à partir d'un nombre exprimé en base 2 sur n bits : N 10 = k = 0 n - 1 a k 2 k .
Cette relation permet de convertir un nombre exprimé en base 2 en un nombre exprimé en base 10.

101011012=17310
On applique la définition à la suite binaire : 10101101
1 x 2 7 + 0 x 2 6 + 1 x 2 5 + 0 x 2 4 + 1 x 2 3 + 1 x 2 2 + 0 x 2 1 + 1 x 2 0
128 + 32 + 8 + 4 + 1 = 173

Prendre un papier et un crayon, puis demander

Solution [ Voir ]

La conversion décimale binaire est réalisée à l'aide d'une suite de divisions pas 2 jusqu'à ce que le quotient vaille 0.

173 2
13 86 2
1 06 43 2
0 03 21 2
1 01 10 2
1  0 5 2
1 2 2
0 1 2
1 0
Après avoir fait toutes les divisions en cascade, on relève tous les restes des divisions en partant par le reste de la dernière division effectuée et en terminant par le reste de la première division effectuée. Ces valeurs binaires correspondent à la valeur du nombre décimal en binaire.

L'exemple ci-contre donne la conversion de 173 en base 2

  1. on divise 173 par 2, le quotient est 86 et le reste est 1
  2. on divise 86 par 2, le quotient est 43 et le reste est 0
  3. on divise 43 par 2, le quotient est 21 et le reste est 1
  4. on divise 21 par 2, le quotient est 10 et le reste est 1
  5. on divise 10 par 2, le quotient est 5 et le reste est 0
  6. on divise 5 par 2, le quotient est 2 et le reste est 1
  7. on divise 2 par 2, le quotient est 1 et le reste est 0
  8. on divise 1 par 2, le quotient est 0 et le reste est 1

Le résultat est 17310=101011012

Prendre un papier et un crayon, puis demander

Solution [ Voir ]

A la place des divisions, je propose une méthode avec un tableau. On construit le tableau des puissances de 2 de 128, qui est la puissance de deux immédiatement inférieure à 173, jusqu'à 1

1286432168421
10101101
  1. On calcule 173-128=45 on ajoute 1 dans la colonne 128
  2. On calcule 45-64<0 on garde l'ancienne valeur 45 et on ajoute 0 dans la colonne 64
  3. On calcule 45-32=13 on ajoute 1 dans la colonne 32
  4. On calcule 13-16<0 on garde l'ancienne valeur 13 et on ajoute 0 dans la colonne 16
  5. On calcule 13-8=5 on ajoute 1 dans la colonne 8
  6. On calcule 5-4=1 on ajoute 1 dans la colonne 4
  7. On calcule 1-2<0 on garde l'ancienne valeur 1 et on ajoute 0 dans la colonne 2
  8. On calcule 1-1=0 on ajoute 1 dans la colonne 1

on déduit que 17310= 101011012

Prendre un papier et un crayon, puis demander

Solution [ Voir ]

Les entiers signés

Pour représenter les nombres négatifs dans une base, on utilise le complément à la base en utilisant la relation - b n 2 N b n 2 - 1 où N est le nombre signé et n le nombre de bits maximium utilisé pour la représentation. Cela signifie qu'un nombre signé ne peut être identifié comme signé que sur un nombre de bits connus. Cela ne pose pas de problème pour les calculatrices et ordinateurs car le nombre de bits est fixé par la structure matérielle de la machine et peut être 8,16,32 ou encore 64 bits (8 et 16 étant maintenant obsolètes).

Dans le cas de la base 2 cette relation donne - 2 n 2 N 2 n 2 - 1 - 2 n - 1 N 2 n - 1 - 1 . Ce qui fait que c'est le bit de poids le plus fort (rang n-1), pour un nombre exprimé sur n bits, qui représente le signe du nombre, ce qui fait que le nombre en base 10, peut s'écrire en utilisant la relation : N 10 = - a n - 1 2 n - 1 + k = 0 n - 2 a k 2 k .

101011012=-8310
On applique la définition à la suite binaire : 10101101
-1 x 2 7 + 0 x 2 6 + 1 x 2 5 + 0 x 2 4 + 1 x 2 3 + 1 x 2 2 + 0 x 2 1 + 1 x 2 0
- 128 + 32 + 8 + 4 + 1 = -83

Une remarque importante :
la valeur négative -83 donne la même suite binaire que 173 sur 8 bits. On en déduit que la valeur binaire ne permet pas de savoir si le nombre est négatif ou positif. Ceci explique que certains langage de programmation distinguent les entiers signés des entiers son signés et d'autres utilisent uniquement des entiers signés. Au niveau du processeur c'est un registre particulier, nommé registre d'état qui contient les informations de signe après chaque calcul.
Sur les calculatrices les fonctions de conversions qui traitent les nombres négatifs utilise un certain nombre de bits (en général 16) qu'il faut respecter pour obtenir le bon résultat.

Addition en binaire

Addition en binaire

L'addition en binaire donne un résultat binaire identique pour les nombres signés et non signés. Cela vient de la représentation des entiers signés en complément à 2 et confirme que la représentation binaire ne permet de définir le type d'entier signé ou non signé.

1 1  valeur non signée valeur signée
0100100173 73
+10101101173 -83
11110110246 -10

Le résultat ne peut pas être exprimé sur 9 bits, la retenue n'est pas affichée, car les microprocesseurs expriment le résultat sur le même nombre de bits que les opérandes :

11111  valeur non signée valeur signée
11110111247 -9
+0101110092 92
01010011339 83
calcul non signé : on trouve une retenue finale (le résultat ne peut pas être exprimé sur 8 bits non signé)

L'addition de deux nombres non signés de n bits donne normalement un nombre sur n bits. Le résultat est exprimé sur sur n bits, il y a donc des cas ou le résultat sera erroné.
L'addition de deux nombres signés de n bits peut également fournir des résultats erronés, comme la somme de deux nombres positifs qui donnent un nombre négatif ou bien la somme de deux nombres négatifs qui donnent un résultat positif, dans ce cas on parle de dépassement dans les calculs.

1111  valeur non signée valeur signée
01101010106 106
+0011110161 61
10100111167 -89
calcul signé, il y a dépassement : l'addition de deux nombres positifs ne peut pas donner un résultat négatif

En base 10 faire une soustraction revient à ajouter l'opposé du nombre. En base 2, faire une soustraction revient également à ajouter la valeur négative du nombre qui est le complément à 2 du nombre.

Le calcul du complément à 2
Pour transformer un nombre positif en un nombre négatif en base 10, on ajoute le signe moins devant le nombre. En base 2 on calcule le complément à 2 qui consiste à prendre le complément à 1 du nombre puis ajouter 1. Le complément à 1 consiste à changer la valeur de chaque bit : un 0 devient un 1 et un 1 devient un 0.
L'exemple ci-dessous montre comment calculer le complément à 2 de la valeur 83 en base 10, et vérifie que le résultat donne bien -83.

01010011=83
10101100
+00000001
10101101=-83

Prendre un papier et un crayon, puis demander

Solution [ Voir ]

Représentation des réels

Réels en virgule fixe

Un nombre en virgule fixe possède une partie entière et une partie fractionnaire (les chiffres après la virgule). Chaque partie est exprimée sur un nombre maximum de bits.
On procède de manière identique à la méthode des nombres non signés pour la partie entière, exprimée sur n bits, et, en ajoutant des puissances négatives de 2 pour la partie fractionnaire exprimée sur p bits : N 10 = k = - p n - 1 a k 2 k .
La conversion de la forme binaire vers la forme décimale se fait également en appliquant la définition :

110001.0011112=49.23437510
On applique la définition à la suite binaire : 110001.001111
1 x 2 5 + 1 x 2 4 + 0 x 2 3 + 0 x 2 2 + 0 x 2 1 + 1 x 2 0 + 0 x 2 -1 + 0 x 2 -2 + 1 x 2 -3 + 1 x 2 -4 + 1 x 2 -5 + 1 x 2 -6
32 + 16 + 1 + 0.125 + 0.0625 + 0.03125 + 0.015625 = 49.234375

La conversion de la valeur décimale de la partie entière utilise les mêmes méthodes que pour les nombres non signés. Pour la partie fractionnaire, on utilise une suite de multiplications par 2 de la partie fractionnaire jusqu'à obtenir 0 pour la partie entière et pour la partie fractionnaire. La valeur binaire est composée de la suite des parties entières des résultats des multiplications.

49.23437510=110001.0011112

La partie entière 4910 vaut 1100012
On utilise une suite de multiplications par 2 pour la partie fractionnaire : 0.23437510

0.234375 × 2=0.46875
0.46875 × 2=0.9375
0.9375 × 2=1.875
0.875 × 2=1.75
0.75 × 2=1.5
0.5 × 2=1
0 × 2=0
La partie fractionnaire vaut : 0.0011112

Prendre un papier et un crayon, puis demander

Solution [ Voir ]

Une remarque importante : En base dix, où tous les nombres ne peuvent être exprimés avec un nombre fini de chiffres après la virgule. On a le même problème en base 2, ce qui provoque des calculs d'arrondis et quelques fois des erreurs de calculs.
Comme le montre le calcul, c'est le cas du la représentation binaire de 0.2 :
0.210=0.0011001100110011...2

0.2 × 2=0.4
0.4 × 2=0.8
0.8 × 2=1.6
0.6 × 2=1.2
0.2 × 2=0.4
0.4 × 2=0.8
0.8 × 2=1.6
0.6 × 2=1.2
0.2 × 2=0.4
Le tableau ci-dessous représente la valeur réelle par défaut enregistrée en fonction du nombre de bits
Nombre de bits valeur
80.19921875
120.199951171875
160.19999694824219
240.19999998807907
320.19999999995343

Réels en virgule flottante

La représentation virgule flottante est identique à la notation scientifique en base 10 qui utilise un nombre, nommé mantisse, multiplié par une puissance de 10. En base 2 on utilise une puissance de 2 ce qui donne N 10 = ( - 1 ) s ( 1 + m ) 2 e , avec s bit de signe (0 ou 1), m mantisse de type réel compris entre 0 et 1, et e exposant décalé pour obtenir des valeurs d'exposants négatifs. Un exposant décalé est de la forme e=E-D avec D décalage qui dépend du nombre de bits.
La norme IEEE 754 définit différentes précisions en fonction du nombre de bits affectés à la mantisse et à l'exposant. La valeur réelle est de la forme N 10 = ( - 1 ) s ( 1 + m ) 2 E - D . Les différentes précisions sont rappellées dans le tableau ci-dessous :

simpledoublequadruple
s (bits) 111
m (bits) 2352112
E (bits)81115
D (valeur)127102316383
valeur maxi±3.4×1038±1.8×10308±1.19×104932
valeur mini±2×10-126±2×10-1022±2×10-16382
précision relative2-23≈10-62-52≈10-152-112≈10-33
Il existe une représentation IEEE754 de π pour toutes ces précisions.

On peut calculer la représentation d'un nombre en virgule flottante en partant de la représentation en virgule fixe de ce nombre. Pour cela il suffit de décaler la valeur en virgule fixe pour obtenir la forme 1,m en ajoutant l'exposant qui correspond à ce décalage.

Pour exprimer 49.234375 au format simple précision,on part du format en virgule fixe qui est : 110001.00111100000000000000000, puis en décalant la virgule fixe de 5 à gauche, on obtient 1.10001001111000000000000, on obtient donc :
signe s0
mantisse m 10001001111000000000000
exposant décalé E10000100
La valeur enregistrée est bien : 49.234375.
Pour exprimer 0.2 au format simple précision,on part du format en virgule fixe qui est : .00110011001100110011001, puis en décalant la virgule fixe de 3 à droite, on obtient 1.10011001100110011001100, on obtient donc :
signe s0
mantisse m 10011001100110011001100
exposant décalé E01111100
La valeur enregistrée est : 0.19999998807907