Codage de l’information

 

Il y a 10 types de personnes dans le monde, ceux qui comprennent le binaire et les autres

 

Introduction :


L’information traitée par un ordinateur peut être de différente nature : Nombres, texte, image, vidéo, sons, programmes, … Cette information est toujours représentée sous forme d’un ensemble de nombre en base 2.
Le terme bit (b 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 par un signal électrique ou magnétique, qui, au-delà d’un certain seuil, correspond à la valeur 1, 0 sinon. L’octet (en anglais byte ou B majuscule dans les notations) est une unité d’information composée de 8 bits. Il permet par exemple de stocker un caractère comme une lettre ou un chiffre. 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). 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. Voici les unités standardisées :

  • Un kilooctet (ko) = 1000 octets
  • Un mégaoctet (Mo) = 106 octets
  • Un gigaoctet (Go) = 109 octets
  • Un téraoctet (To) = 1012 octets
  • Un pétaoctet (Po) = 1015 octets

 

 

Base décimale, binaire et hexadécimale:

Nous utilisons le système décimal (base 10) dans nos activités quotidiennes. Ce système est basé sur dix symboles, de 0 à 9, avec une unité supérieure (dizaine, centaine, etc.) à chaque fois que dix unités sont comptabilisées. C’est un système positionnel, c’est-à-dire que l’endroit où se trouve le symbole définit sa valeur. Ainsi, le 2 de 523 n’a pas la même valeur que le 2 de 132. En fait, 523 est l’abréviation de 5·102+2·101+3·100. On peut selon ce principe imaginer une infinité de systèmes numériques fondés sur des bases différentes. En informatique, outre la base 10, on utilise très fréquemment le système binaire (base 2) puisque l’algèbre booléenne est à la base de l’électronique numérique. Deux symboles suffisent : 0 et 1. On utilise aussi très souvent le système hexadécimal (base 16) du fait de sa simplicité d’utilisation et de représentation pour les mots machines (il est bien plus simple d’utilisation que le binaire). Il faut alors six symboles supplémentaires : A (qui représente le 10), B(11), C(12), D(13), E(14) et F(15).

 

Conversion décimal <–> binaire :

 

Convertissons 01001101 en décimal :

 

 

 

 

 

 

 

 

 

 

 

 

Allons maintenant dans l’autre sens :

Conversion hexadécimal <–-> binaire :

 

Pour convertir un nombre binaire en hexadécimal, il suffit de faire des groupes de quatre bits (en commençant depuis la droite).

Par exemple, convertissons 1001101 :

 

 

 

 

 

 

 

 

 

d’hexadécimal en binaire :

 

 

 

 

 

 

 

 

 

Exercice :

 

Écrivez en Python un programme permettant de convertir un nombre d’une base de départ d vers une base d’arrivée a (d et a compris entre 2 et 16).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Représentation des nombres entiers :


Représentation d’un entier naturel :

 

Un entier naturel est un nombre 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.
Exemples : 9 = 000001012, 128 = 100000002, etc.

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. Cette représentation permet d’effectuer les opérations arithmétiques usuelles naturellement.

  • Un entier relatif positif ou nul sera représenté en binaire (base 2) comme un entier naturel, à la seule différence que le bit de poids fort (le bit situé à l’extrême gauche) représente le signe. Il faut donc s’assurer pour un entier positif ou nul qu’il est à zéro (0 correspond à un signe positif, 1 à un signe négatif). Ainsi, si on code un entier naturel sur 4 bits, le nombre le plus grand sera 0111 (c’est-à-dire 7 en base décimale).
  • Sur 8 bits (1 octet), l’intervalle de codage est [-128, 127].
  • Sur 16 bits (2 octets), l’intervalle de codage est [-32768, 32767].
  • Sur 32 bits (4 octets), l’intervalle de codage est [-2147483648, 2147483647].

D’une manière générale le plus grand entier relatif positif codé sur n bits sera 2n-1-1.

  • Un entier relatif négatif sera représenté grâce au codage en complément à deux.

 

Principe du complément à deux :

 

  1. Écrire 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. On fait ce qu’on appelle le complément à un.
  3. On ajoute 1 au résultat (les dépassements sont ignorés).

Cette opération correspond au calcul de 2n-|x|, où n est la longueur de la représentation et |x| la valeur absolue du nombre à coder.

Ainsi (-1) s’écrit comme 256-1=255=111111112, pour les nombres sur 8 bits.

 

Exemple :

 

On désire coder la valeur (-19) sur 8 bits. Il suffit :

  1. d’écrire 19 en binaire : …………………
  2. d’écrire son complément à 1 : …………………..
  3. et d’ajouter 1 : …………………………

La représentation binaire de (-19) sur 8 bits est donc 11101101.

On remarquera qu’en additionnant un nombre et son complément à deux on obtient 0. En effet,

00010011 + 11101101 = 00000000 (avec une retenue de 1 qui est éliminée).

 

 

 


Astuce :

 

Pour transformer de tête un nombre binaire en son complément à deux, on parcourt le nombre de droite à gauche en laissant inchangés les bits jusqu’au premier 1 (compris), puis on inverse tous les bits suivants.
Prenons comme exemple le nombre 20 : 00010100.

 

  1. On garde la partie à droite telle quelle : 00010100
  2. On inverse la partie de gauche après le premier un : 11101100
  3. Et voici -20 : 11101100

 

Exercice :

 

  1. Codez les entiers relatifs suivants sur 8 bits (16 si nécessaire) : 456, -1, -56, –
  2. Que valent en base dix les trois entiers relatifs suivants :

 

01101100                11101101                      1010101010101010      ?

 

 

 

Représentation des nombres réels

 

En base 10, l’expression 652,375 est une manière abrégée d’écrire :

6·102 + 5·101 + 2·100 + 3·10-1 + 7·10-2+ 5·10-3

Il en va de même pour la base 2. Ainsi, l’expression 110,101 signifie :

1·22 + 1·21 + 0·20 + 1·2-1 + 0·2-2+ 1·2-3.

Conversion de binaire en décimal

 

On peut ainsi facilement convertir un nombre réel de la base 2 vers la base 10. Par exemple :
110,1012 =
Exercice :

 

Transformez 0,01010101012 en base 10.

 

 

Transformez 11100,100012 en base 10.

Conversion de décimal en binaire

 

Le passage de base 10 en base 2 est plus subtil. Par exemple : convertissons 1234,347 en base 2.

  • La partie entière : 123410 = 100110100102

 

  • On transforme la partie décimale selon le schéma suivant :

0,347·2 = 0,694 0,347 = 0,0

0,694·2 = 1,388 0,347 = 0,01

0,388·2 = 0,766 0,347 = 0,010

0,766·2 = 1,552 0,347 = 0,0101

0,552·2 = 1,104 0.347 = 0,01011

0,104·2 = 0,208 0,347 = 0,010110

0,208·2 = 0,416 0,347 = 0,0101100

0,416·2 = 0,832 0,347 = 0,01011000

0,832·2 = 1,664 0,347 = 0,010110001

0,664·2 = 1,328 0,347 = 0,0101100011

0,328·2 = 0,656 0,347 = 0,01011000110

On continue ainsi jusqu’à la précision désirée…

 

Attention ! Un nombre à développement décimal fini en base 10 ne l’est pas forcément en base 2.

 

Exercice :

 

Transformez 0,562510 en base 2.

Transformez 0,1510 en base 2.

Transformer 12,910 en base 2.

 

 La norme IEEE 754 ( i 3 e)

 

La norme IEEE 754 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 :

  • le signe est représenté par un seul bit, le bit de poids fort
  • l’exposant est codé sur les 8 bits consécutifs au signe
  • la mantisse (les bits situés après la virgule) sur les 23 bits restants

 

 

Certaines conditions sont toutefois à respecter pour les exposants :

  • l’exposant 00000000 est interdit.
  • l’exposant 11111111 est interdit. On s’en sert toutefois pour signaler des erreurs, on appelle alors cette configuration du nombre NaN, ce qui signifie « Not a number ».
  • il faut rajouter 127 (01111111) à l’exposant pour une conversion de décimal vers un nombre réel binaire. Les exposants peuvent ainsi aller de -254 à 255.

La formule d’expression des nombres réels est ainsi la suivante :

(1)^S * 2^(E 127) * (1 + F)

  • S est le bit de signe.
  • E est l’exposant auquel on doit bien ajouter 127 pour obtenir son équivalent codé,
  • F est la partie fractionnaire.

 

 

 

Exemple :

 

Traduisons en binaire, en utilisant la norme IEEE 754, le nombre (- 6,625).

  • Codons d’abord la valeur absolue en binaire : 6,62510 = 110,10102
  • Nous mettons ce nombre sous la forme : 1, partie fractionnaire

110,1010 = 1,101010·22 (22 décale la virgule de 2 chiffres vers la droite)

  • La partie fractionnaire étendue sur 23 bits est donc 101 0100 0000 0000 0000 0000.
  • Exposant = 127 + 2 = 12910 = 1000 00012

Signe Exposant Mantisse

1 1 0 0 0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

 

En hexadécimal : C0 D4 00 00.

 Le code ASCII

 

La norme ASCII2 (on prononce généralement « aski ») établit une correspondance entre une représentation binaire des caractères de l’alphabet latin et les symboles, les signes, qui constituent cet alphabet. Par exemple, le caractère a est associé à 1100001 (97) et A à 1000001 (65).
La norme ASCII permet ainsi à toutes sortes de machines de stocker, analyser et communiquer de l’information textuelle. En particulier, la quasi-totalité des ordinateurs personnels et des stations de travail utilisent l’encodage ASCII. Le code ASCII de base représentait les caractères sur 7 bits (c’est à- dire 128 caractères possibles, de 0 à 127).

  • Les codes 0 à 31 ne sont pas des caractères. On les appelle caractères de contrôle car ils permettent de faire des actions telles que :
  • retour à la ligne (Carriage return)
  • bip sonore (Audible bell)
  • Les codes 65 à 90 représentent les majuscules
  • Les codes 97 à 122 représentent les minuscules (il suffit de modifier le 6ème bit pour passer de majuscules à minuscules, c’est-à-dire ajouter 32 au code ASCII en base décimale).

 

Le code ASCII a été mis au point pour la langue anglaise, il ne contient donc pas de caractères accentués, ni de caractères spécifiques à une langue. Le code ASCII a donc été étendu à 8 bits pour pouvoir coder plus de caractères (on parle d’ailleurs de code ASCII étendu…). Cette norme s’appelle ISO-8859 et se décline par exemple en ISO-8859-1 lorsqu’elle étend l’ASCII avec les caractères accentués d’Europe occidentale, et qui est souvent appelée Latin-1 ou Europe occidentale.

 

 

 

 

 

 

 

 

 

Il existe d’autres normes que l’ASCII, comme l’Unicode par exemple, qui présentent l’avantage de proposer une version

unifiée des différents encodages de caractères complétant l’ASCII mais aussi de permettre l’encodage de caractères autres que ceux de l’alphabet latin. Unicode définit des dizaines de milliers de codes, mais les 128 premiers restent compatibles avec ASCII.
Dans le codage UTF-8, chaque point de code est codé sur une suite d’un à quatre octets. Il a été conçu pour être compatible avec certains logiciels originellement prévus pour traiter des caractères d’un seul octet.