CM4 : Codage de l'Information


I : Définitions *

II : Les principaux codes *

  • II.1 : Numération *

    II.1.a : Principe *

    II.1.b : La base 2 *

    II.1.c : La base 16 *

    II.1.d : la base 10 *

    II.1.e : la base 8 *

    II.2 : Code non numéraires *

    II.2.a : Code BCD *

    II.2.b : Code ASCII *

  • III : Format d’un code *

    IV : Transcodage *

  • IV.1 : Binaire à Décimal. *

    IV.2 : Décimal à Binaire *

    IV.2.a : Méthode par pesées *

    IV.2.b : Méthode par divisions entières *

    IV-3 : Binaire ß à Hexadécimal *

    IV-4 : Binaire ß à Octal *

    IV-5 : Décimal ß à Hexadécimal *

  • III : Représentation machine des nombres *

  • III.1 : Entiers naturels *

    III.2 : Entiers relatifs *

    III.3 : Nombres réels *

  •  


     

    I : Définitions

    Information : toute caractéristique d’un être ou d’un phénomène donné. Par exemple :

    Etudiant : nom, âge, n°INSEE…

    Gaz : température, pression…

    Une information peut être de nature numérique, alphanumérique…

    Code : convention de représentation de l’information.

    Nom d’un étudiant : codé avec un nombre variable de caractères de l’alphabet latin.

    Numéro de téléphone : codé avec 10 chiffres décimaux.

    Informatique : technique du traitement automatique de l’information (Larousse).

     

    II : Les principaux codes

     

    II.1 : Numération

    II.1.a : Principe

    On choisit une base B. Un nombre est alors représenté dans cette base à l’aide de B symboles distincts, appelés chiffres ou digits en anglais, et de leur position d’écriture, appelé poids. Par exemple, en base 10 (B=10), les symboles utilisés sont 0,1,2,3,4,5,6,7,8,9. Pour représenter un nombre dans cette base, par exemple l’année en cours, on écrit :

    1998, ce qui signifie 1*1000+9*100+9*10+8*1. On voit que le chiffre le plus à droite est affligé d’un poids 0 (il est multiplié par 1), son voisin de gauche d’un poids 1 (il est multiplié par 10) etc…

    Lorsqu’on écrit 1998, on écrit uniquement les chiffres et pas les poids, ceux-ci étant implicites. Il convient normalement de préciser la base, par exemple (1998)10 pour " mille neuf cent quatre-vingt dix-huit en base 10 ". Le codage en base 10 étant utilisé dans la vie courante, on ne précise pas la base et elle est, elle aussi, implicite.

    II.1.b : La base 2

    Appelé également code binaire naturel, la numération en base 2 est particulièrement adaptée à l’informatique (à cause de l’électronique des ordinateurs).

    Dans ce code, B=2, les chiffres sont 0 et 1. Ils sont appelés bits (binary digit). Un nombre s’écrit donc :

    (A)2 = a3a2a1a0. Sa valeur est : avec B=2.

    Le bit le plus à gauche est appelé MSB (Most Significant Bit = bit le + significatif) ou bit de poids fort, le plus à droite LSB (Less Significant Bit = bit le – significatif) ou bit de poids faible.

    En général les nombres binaires sont notés :

    %10010010 (notation Motorola) , 101100100b (notation Intel), (100001101)2.

    Cette base est très utile en informatique car les ordinateurs sont construits avec des composants logiques, ne présentant que des états vrais (1) ou faux (0).

    Son principal défaut est sa faible lisibilité, et la taille des nombres binaires.

     

    II.1.c : La base 16

    Ce code est appelé code hexadécimal. Ici B=16, les symboles utilisés sont les chiffres décimaux plus les six lettres A,B,C,D,E,F.

    Son principal intérêt est de palier à la faible lisibilité du code binaire.

    Le nombre hexadécimaux sont en général notés :

    $A360 (notation Motorola) , 0F50h (notation Intel), (1A3E)16

    II.1.d : la base 10

    Code décimal : code couramment utilisé. Peu adapté à l’informatique, car 10 n’est pas une puissance de 2.

    II.1.e : la base 8

    Code octal : peu utilisé. Les chiffres utilisés sont 0,1,2,3,4,5,6,7. Il est noté :

    @012 (notation Motorola) , 126o (notation Intel) , (90)8

     

    II.2 : Code non numéraires

    Ces codes sont soit non numériques, soit numérique sans notion de position ni de base.

    II.2.a : Code BCD

    Binary Coded Decimal, décimal codé binaire.

    Chaque chiffre décimal est codé en binaire, sur 4 bits :

    1998 =

    1

    9

    9

    8

    BCD : 0001 1001 1001 1000

    0001

    1001

    1001

    1000

    Binaire : 0111 1100 1110

     

    On remarque le code BCD est totalement différent du code binaire naturel.

    Ce code est très utilisé dans les afficheurs digitaux et les calculs financiers.

    II.2.b : Code ASCII

    American Standard Code for Information Interchange : code américain standard pour l’échange d’informations.

    C’est un code alphanumérique, qui code en binaire sur 7 bits les lettres de l’alphabet (minuscules et majuscules), les chiffres décimaux, les symboles utilisés sur les ordinateurs plus quelques caractères de contrôle. (table ASCII en annexe).

    Son codage sur 7 bits lui donne 128 valeurs distinctes, ce qui est insuffisant à coder tous les symboles européens (accents, etc…)

    Il est donc apparu des codes dits ASCII étendu, codés sur 8 bits (256 valeurs). Les codes étendus, de 128 à 255, sont attribués aux différents jeux de caractères des constructeurs informatiques et développeurs de logiciels. Souvent, ces codes étendus dépendent d’une langue ou ensemble de langue (code latin par ex.), ou différent d’un constructeur à l’autre (IBM/Apple par ex…) ou d’un système d’exploitation à l’autre (DOS/Windows). La standardisation générale n’est effective qu’avec le code ASCII.

     

    III : Format d’un code

    La plupart du temps, on a besoin de savoir combien de chiffres (digits) sont nécessaires pour coder une information. Bien que dans la vie courante, on n’a pas besoin de connaître le format des nombres en base 10 (format illimité), en technologie les mémoires, circuits logiques, circuits de calcul ont des capacités limitées, on a donc besoin d’un format limité.

    Le format conditionne la capacité d’un code. En base 2, un format de 4 bits permet de code 24=16 valeurs distinctes. On peut donc, par exemple, coder les entiers de 0 à 15. Inversement, si l’on veut, par exemple, 1000 valeurs en binaire, on a besoin de 10 bits (210=1024). En hexadécimal, 3 chiffres suffiraient (163=4096) et 4 en octal. On utilise 3 chiffres en décimal.

    Bien entendu, il convient de ne pas utiliser un format trop important (par ex, 80 bits) si les informations que l’on veut coder son peu nombreuses (ex, code ASCII, 128 valeurs).

     

    IV : Transcodage

    = Passage d’un code à l’autre.

    Le plus couramment, on aura besoin de passer du binaire au décimal (et vice-versa).

     

    IV.1 : Binaire à Décimal.

    Le décimal étant la " base courante ", le passage est simple :

    Par exemple, %1011 = 1*23+0*22+1*21+1*20=1*8+0*4+1*2+1*1=8+2+1=11.

     

    IV.2 : Décimal à Binaire

    Il existe plusieurs méthodes. Notons A le nombre codé en base 10 et B le nombre codé en base 2. Les chiffres utilisés pour A sont les ai, ceux pour B les bj . On a :

    Le format de A (n chiffres) est bien entendu différent de celui de B (p chiffres).

    Le problème est de déterminer les bj, connaissant les ai.

    IV.2.a : Méthode par pesées

    Principe : on cherche la + grande puissance de 2 dans le nombre, puis la plus grande dans la différence, etc…

    Par exemple, 43 (base 10) peut se " peser " comme suit :

    25=32<43 ; 26=64>43, donc 43=25+(43-32)=25+11.

    24=16>11 ; 2 3=8<11, donc 43=25+23+(43-32-8)=25+23+3.

    22=4>3 ; 21=2<3 , donc 43=25+23+21+(43-32-8-2)= 25+23+21+1.

    20=1, on a donc le nombre en entier :

    43=1*25+0*24+1*23+0*22+1*21+1*20 = %101011

    IV.2.b : Méthode par divisions entières

    Le principe est celui de l’algorithme de Horner et peut être appliqué à la convertion de n’importe quelle base (2 mais aussi 16,8,et pourquoi pas 3,11….).

    Tout polynôme P écrit de manière générale P=an-1.xn-1+…+a0.x0 peut s’écrire :

    P=(….(an-1.x+an-2).x+an-3)….).x+a0.

    Par exemple, pour n=3,

    Il suffit donc d’appliquer une division entière par B (la base) qui donnera :

    Par exemple, pour un nombre codé sur 4 bits :

    N=a323+a222+a121+a0 = ((a3.2+a2).2+a1).2+a0

    La première division entière par 2 donne : reste = a0, quotient (a3.2+a2).2+a1

    La deuxième division entière par 2 donne : reste = a1, quotient a3.2+a2

    La troisième division entière par 2 donne : reste = a2, quotient a3.

    On a pu ainsi déterminer les 4 bits de N.

    Pour déterminer les n bits d’un nombre binaire, il suffit d’avoir les restes de n divisions entières successives par 2 de N.

     

    IV-3 : Binaire ß à Hexadécimal

    On remarque que 16=24.

    Il suffit donc de " découper " le nombre binaire par tranche de 4 bits, de convertir chaque groupe de 4 bits en base 16, pour avoir chaque chiffre hexa.

    Exemple :

    (3247)10 = %1100 1010 1111

    On a %1100=12=$C, %1010=10=$A, %1111=15=$F.

    Donc 3247 = $CAF.

    Le passage inverse suit le même principe.

     

    IV-4 : Binaire ß à Octal

    Même méthode que pour l’hexadécimal, on remarquant que 8=23.

     

    IV-5 : Décimal ß à Hexadécimal

    Il suffit de passer du décimal au binaire, puis du binaire à l’hexa.

    On peut aussi appliquer la méthode des divisions successives à la base 16.

    Pour le passage inverse, il suffit d’appliquer la formule :

     

    III : Représentation machine des nombres

    Pour effectuer des calculs mathématiques, on utilise des nombres de nature diverses :

     

    Leur représentation machine suit des règles.

     

    III.1 : Entiers naturels

    Dits également entiers non signés. Codés en base 2 sur n bits, ils ont une étendue de 0 à 2n-1. Par exemple, avec 4 bits, de 0 à 15 ; avec 16 bits, de 0 à 65535.

    On représente tous les bits du format, même s’il y a des 0 à droite. (cela permet d’indiquer le format) On sépare habituellement les bits par groupe de 4 pour simplifier la lecture et la conversion en hexa.

    Exemple :

    10 = %1010 sur 4 bits.

    535 = %0000 0010 0001 0111 sur 16 bits.

     

    III.2 : Entiers relatifs

    Dits entiers signés.

    Les entiers positifs sont codés de la même manière que les naturels.

    Pour les nombres négatifs, une convention s’impose. Il faut pouvoir coder le signe. On utilise le MSB pour cela (bit de poids le + fort). Il sera donc à 0 pour un nombre positif, à 1 pour un nombre négatif. On voit donc qu’1 des n bits n'est pas utilisé pour coder le nombre, l'étendue des nombres positifs est donc réduite. On code les nombres positifs de 0 à 2n-1-1. Par exemple, avec 4 bits, de 0 à 7.

    Comment à présent traiter les nombres négatifs ? On pourrait imaginer coder la valeur absolue du nombre avec les n-1 bits de poids faible. Cela donnerait:

    Sur 4 bils: 5=%0101, donc -5=%l l01.

    On remarque un problème d’arithmétique: 5-5+5+(-5)=%0101 +% 1101 =%1 0010

    Or le nombre %0010 dépasse la capacité (il a besoin de 5 bits). De plus, il n'est en aucun cas égal a 0. Ce système de codage est donc mal adapté. Il faudrait en effet que x+(-x) soit nul !

    Pour cela, on code avec les n-1 bits faibles le complément restreint de la valeur absolue du nombre.

    Le complément d'un nombre de n bits le nombre code par les compléments bit à bit. Par exemple:

    Le complément sur 4 bits de 5=%0101 est %1010.

    Le complément vrai est le complément auquel on ajoute 1.

    Le complément restreint sur 4 bits de 5 est: %1111-%0101+%0001=%1011.

    Donc. –5=%1011. On remarque que %0101+%1011=%0000, la règle mathématique –5+5=0 est respectée !

    On nombre entier relatif est codé en binaire de la façon suivante :

    Son signe est codé par le MSB : 1 pour négatif, 0 pour positif.

    Sa valeur absolue est codée en binaire naturel pour un nombre positif, par son complément restreint pour un nombre négatif.

    L’étendue de ce code est : de –2n-1 à 2n-1-1. On a bien 2n valeurs distinctes.

    Exemple sur 4 bits (16 valeurs) :

    X

    Valeur absolue Complément Complément vrai

    +7

    0111

       

    +6

    0110

       

    +5

    0101

       

    +4

    0100

       

    +3

    0011

       

    +2

    0010

       

    +1

    0001

       

    +0

    0000

       

    -0

    1000

    1111

    0000

    -1

    1001

    1110

    1111

    -2

    1010

    1101

    1110

    -3

    1011

    1100

    1101

    -4

    1100

    1011

    1100

    -5

    1101

    1010

    1011

    -6

    1110

    1001

    1010

    -7

    1111

    1000

    1001

    -8

    Impossible

    Impossible

    1000

     

    III.3 : Nombres réels

    Il existe deux modes possibles : à virgule fixe et à virgule flottante.

    Le mode à virgule fixe est en fait similaire aux entiers, puisqu’il revient à fixer le nombre de chiffres avant et après la virgule (un simple décalage ramène aux entiers relatifs).

    Le mode à virgule flottante est plus intéressant :

    Rappel : notation scientifique : tous les nombres réels peuvent s’écrire sous la forme suivante :

    X = ± M*Bc

    M s’appelle la mantisse, C la caractéristique ou l’exposant, et B est la base.

    Par exemple, 1789 = 1,789*103.

    Normalisation : on fixe une condition sur la mantisse pour ne représenter que sa partie fractionnaire (après la virgule) :

    En décimal on a 0,1£M<1 ; en binaire 1£M<2 .

    Le codage machine est donc le suivant en base 2 :

      bit signe k bits de c codes cv p bits partie fractionnaire de m
    Général an-1 an-2……………………….an-1-k an-2-k……….………………a0
    32 bits a31 a30……………………….….a23 a22….…….……………...…a0

    (exemple avec 8 bits d’exposant et 23 bits de mantisse).

    La capacité de ce code est :

    Ce qui donne, pour 32 bits (8 bits exposant, 23 bits mantisse), de 0,3.10-38 à 2,538.

    La précision est de

    Ce qui donne, par exemple pour une mantisse 23 bits, une précision d’environ 10-7 (7 chiffres après la virgule).

    Il existe des normes pour la représentation machine des " flottants " :

      Format C M Etendue Précision
    Simple 32 bits 8 23 De 0,3.10-38 à 2,5.1038 10-7
    Double 64 bits 11 52 De 0,5.10-308 à 2.10308 10-16
    Double étendu 80 bits 15 64 De 0,5.10-4930 à 2.104930 10-19