Codage binaire

source : http://www.commentcamarche.net

Présentation du binaire

Vers la fin des années 30, Claude Shannon démontra qu'à l'aide de « contacteurs » (interrupteurs) fermés pour « vrai » et ouverts pour « faux » il était possible d'effectuer des opérations logiques en associant le nombre 1 pour « vrai » et 0 pour « faux ».

Ce codage de l'information est nommé base binaire. C'est avec ce codage que fonctionnent les ordinateurs. Il consiste à utiliser deux états (représentés par les chiffres 0 et 1) pour coder les informations.

L'homme calcule depuis 2000 ans avant Jésus-Christ avec 10 chiffres (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), on parle alors de base décimale (ou base 10). Toutefois dans des civilisations plus anciennes ou pour certaines applications actuelles d'autres bases de calcul ont et sont toujours utilisées :

Le bit

Le terme bit (b avec une minuscule dans les notations) signifie « binary digit », c'est-à-dire 0 ou 1 en numérotation binaire. Il s'agit de la plus petite unité d'information manipulable par une machine numérique. Il est possible de représenter physiquement cette information binaire :

Avec un bit il est ainsi possible d'obtenir deux états : soit 1, soit 0. Grâce à 2 bits, il est possible d'obtenir quatre états différents (2*2) :

0 0
0 1
1 0
1 1

Avec 3 bits, il est possible d'obtenir huit états différents (2*2*2) :

Valeur binaire sur 3 bits Valeur décimale
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Pour un groupe de n bits, il est possible de représenter 2n valeurs.

Poids des bits

Dans un nombre binaire, la valeur d'un bit, appelée poids, dépend de la position du bit en partant de la droite. A la manière des dizaines, des centaines et des milliers pour un nombre décimal, le poids d'un bit croît d'une puissance de deux en allant de la droite vers la gauche comme le montre le tableau suivant :

Nombre binaire 1 1 1 1 1 1 1 1
Poids 27 = 128 26 = 64 25 = 32 24 = 16 23 = 8 22 = 4 21 = 2 20 = 1

Conversions

Pour convertir un mot binaire en nombre décimal, il suffit de multiplier la valeur de chaque bit par son poids, puis d'additionner chaque résultat. Ainsi, le mot binaire 0101 vaut en décimal :

23x0 + 22x1 + 21x0 + 20x1
= 8x0 + 4x1 + 2x0 + 1x1
= 5

L'octet

L'octet (en anglais byte ou B avec une majuscule dans les notations) est une unité d'information composée de 8 bits. Il permet par exemple de stocker un caractère, tel qu'une lettre ou un chiffre.

Ce regroupement de nombres par série de 8 permet une lisibilité plus grande, au même titre que l'on apprécie, en base décimale, de regrouper les nombres par trois pour pouvoir distinguer les milliers. Le nombre « 1 256 245 » est par exemple plus lisible que « 1256245 ».

Une unité d'information composée de 16 bits est généralement appelée mot (en anglais word).

Une unité d'information de 32 bits de longueur est appelée mot double (en anglais double word, d'où l'appellation dword).

Pour un octet, le plus petit nombre est 0 (représenté par huit zéros 00000000), et le plus grand est 255 (représenté par huit chiffres « un » 11111111), ce qui représente 256 possibilités de valeurs différentes.

27 =128 26 =64 25 =32 24 =16 23 =8 22 =4 21 =2 20 =1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1

KiloOctets, MégaOctets

Longtemps l'informatique s'est singularisée par l'utilisation de différentes valeurs pour les unités du système international. Ainsi beaucoup d'informaticiens ont appris que 1 kilooctet valait 1024 octets. Or, depuis décembre 1998, l'organisme international IEC a statué sur la question (http://physics.nist.gov/cuu/Units/binary.html). Voici donc les unités standardisées :

Nota Attention ! De nombreux logiciels (parfois même certains systèmes d'exploitation) utilisent toujours la notation antérieure à 1998 pour laquelle :
  • Un kilooctet (ko) = 210 octets = 1024 octets
  • Un Mégaoctet (Mo) = 220 octets = 1024 ko = 1 048 576 octets
  • Un Gigaoctet (Go) = 230 octets = 1024 Mo = 1 073 741 824 octets
  • Un Téraoctet (To) = 240 octets = 1024 Go = 1 099 511 627 776 octets

L'IEC a également défini le kilo binaire (kibi), le méga binaire (Mébi), le giga binaire (Gibi), le tera binaire (Tebi).
Voici leurs définitions :

Il est également utile de noter que la communauté internationale dans son ensemble utilise préférentiellement le nom de « byte » plutôt que le terme « octet » purement francophone. Cela donne les notations suivantes pour kilobyte, mégabyte, gigabyte et terabyte :

kB, MB, GB, TB
Nota Notez l'utilisation d'un B majuscule pour différencier Byte et bit.

Voici une capture d'écran du logiciel HTTrack, l'aspirateur de sites le plus populaire, montrant l'utilisation de cette notation :

Capture d'écran du logiciel HTTrack

Les opérations en binaire

Les opérations arithmétiques simples telles que l'addition, la soustraction et la multiplication sont faciles à effectuer en binaire.

L'addition en binaire

L'addition en binaire se fait avec les mêmes règles qu'en décimale :
On commence à additionner les bits de poids faible (les bits de droite) puis on a des retenues lorsque la somme de deux bits de même poids dépasse la valeur de l'unité la plus grande (dans le cas du binaire : 1), cette retenue est reportée sur le bit de poids plus fort suivant...

Par exemple :

  0 1 1 0 1
+ 0 1 1 1 0
- - - - - -
  1 1 0 1 1

La multiplication en binaire

La table de multiplication en binaire est très simple :

La multiplication se fait en formant un produit partiel pour chaque digit du multiplicateur (seuls les bits non nuls donneront un résultat non nul). Lorsque le bit du multiplicateur est nul, le produit partiel est nul, lorsqu'il vaut un, le produit partiel est constitué du multiplicande décalé du nombre de positions égal au poids du bit du multiplicateur.

Par exemple :

    0 1 0 1 multiplicande
x   0 0 1 0 multiplicateur
- - - - - -
    0 0 0 0
  0 1 0 1  
0 0 0 0    
- - - - - -
  0 1 0 1 0

Représentation d'un nombre dans un ordinateur

On appelle représentation (ou codification) d'un nombre la façon selon laquelle il est décrit sous forme binaire. La représentation des nombres sur un ordinateur est indispensable pour que celui-ci puisse les stocker, les manipuler. Toutefois le problème est qu'un nombre mathématique peut être infini (aussi grand que l'on veut), mais la représentation d'un nombre dans un ordinateur doit être faite sur un nombre de bits prédéfini. Il s'agit donc de prédéfinir un nombre de bits et la manière de les utiliser pour que ceux-ci servent le plus efficacement possible à représenter l'entité. Ainsi il serait idiot de coder un caractère sur 16 bits (65536 possibilités) alors qu'on en utilise généralement moins de 256...

Représentation d'un entier naturel

Un entier naturel est un entier positif ou nul. Le choix à faire (c'est-à-dire le nombre de bits à utiliser) dépend de la fourchette des nombres que l'on désire utiliser. Pour coder des nombres entiers naturels compris entre 0 et 255, il nous suffira de 8 bits (un octet) car 28=256. D'une manière générale un codage sur n bits pourra permettre de représenter des nombres entiers naturels compris entre 0 et 2n-1.

Pour représenter un nombre entier naturel après avoir défini le nombre de bits sur lequel on le code, il suffit de ranger chaque bit dans la cellule binaire correspondant à son poids binaire de la droite vers la gauche, puis on « remplit » les bits non utilisés par des zéros.

Représentation d'un entier relatif

Un entier relatif est un entier pouvant être négatif. Il faut donc coder le nombre de telle façon que l'on puisse savoir s'il s'agit d'un nombre positif ou d'un nombre négatif, et il faut de plus que les règles d'addition soient conservées. L'astuce consiste à utiliser un codage que l'on appelle complément à deux.

Voyons maintenant cela sur un exemple :
On désire coder la valeur -5 sur 8 bits. Il suffit : Remarques:
Le bit de poids fort est 1, on a donc bien un nombre négatif.
Si on ajoute 5 et -5 (00000101 et 11111011) on obtient 0 (avec une retenue de 1...).

Représentation d'un nombre réel

Il s'agit d'aller représenter un nombre binaire à virgule (par exemple 101,01 qui ne se lit pas cent un virgule zéro un puisque c'est un nombre binaire mais 5,25 en décimale) sous la forme 1,XXXXX... * 2n (c'est-à-dire dans notre exemple 1,0101*22). La norme IEEE définit la façon de coder un nombre réel.
Cette norme se propose de coder le nombre sur 32 bits et définit trois composantes :

Ainsi le codage se fait sous la forme suivante :
seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm

Certaines conditions sont toutefois à respecter pour les exposants :

Voyons ce codage sur un exemple :
Soit à coder la valeur 525,5.