Codage numérique de l'information


Quelle que soit la nature de l'information (image, son, texte ...) traitée par un ordinateur, elle l'est toujours sous la forme d'un ensemble de nombres écrits en base 2. L'objectif de ce TP est d'étudier comment différentes formes d'informations peuvent être codées numériquement en base 2.
 

  1.  Codage du texte.

      Lancer le programme TabCar. En cliquant sur un caractère de la grille, on fait apparaître à droite son code numérique et sa représentation agrandie .

    1. Quelle est la valeur maximale du code numérique d'un caractère et combien faut-il d'octets pour l'écrire en base 2?

      La liste déroulante en haut de la fenêtre permet de choisir la police d'affichage. Selon la police choisie, certains codes peuvent désigner des caractères très différents. Lorsqu'un code est représenté par un carré ou un rectangle vide ou noir, c'est qu'il n'y a pas de caractère associé dans la police choisie Certains codes désignent toujours les mêmes caractères, bien qu'avec un dessin un peu différent, quelle que soit la police choisie (à l'exception bien sûr des polices à vocation graphique ou décorative comme WingDing et Marlett, et de la police Symbol, à vocation mathématique) .
       

    2. Comparer par exemple les polices Arial, Comic Sans, MS Serif et Terminal. Dans quelle partie de la grille se trouvent les caractères qui sont toujours désignés par les mêmes codes?
    3. Pourquoi à votre avis a-t-il été décidé que ces caractères-là auraient toujours les mêmes codes ?
      Avec les trente-deux codes qui les précèdent, ces caractères et leurs codes forment le code ASCII standard. (ASCII=American Standard Code for Information Interchange).
    4. Combien le code ASCII standard compte-t-il de caractères ? Combien faut-il au minimum de bits pour écrire un code ASCII standard ?
    5. Quelle est la police dans laquelle pratiquement tous les codes ont un caractère associé ?

      Cette police permet de visualiser le code ASCII étendu. Il comprend des caractères accentués, des caractères utilitaires (comme © ) et des caractères semi-graphiques qui permettent de tracer des tableaux ou des dessins sur les écrans ne pouvant afficher que du texte (type minitel). Sur les premières générations de PC, on pouvait afficher un caractère ne figurant pas sur le clavier, en composant les trois chiffres de son code ASCII (en base 10 !) à l'aide du pavé numérique, tout en maintenant la touche Alt enfoncée. Cette possibilité existe encore partiellement sous Windows: on peut toujours obtenir un 'é', par exemple, en tapent Alt-130, ou un 'A' en tapant Alt-065, mais d'autres codes ne donneront pas toujours le résultat attendu, parce que Windows gère les caractères d'une façon plus complexe tenant notamment compte des paramètres nationaux. Les codes de 1 à 31 sont des "caractères de contrôle", certains sont des commandes destinés aux imprimantes : saut de page, page suivante...


  2.  Exemples de formats de fichier texte


      Lancer le programme Exafich. Le menu 'Nouveau fichier' permet de choisir un fichier dont on veut examiner le contenu. Le contenu numérique du fichier s'affiche dans la partie gauche, par lignes de 16 octets, au format hexadécimal ou décimal suivant le choix effectué. A droite, les caractères correspondant, en code ASCII, sont affichés également par ligne de 16. Chaque page contient au maximum 32 lignes de 16 octets, c'est à dire 512 octets. Si le fichier contient plus de 512 octets on peut faire défiler les pages en utilisant les boutons en haut de la fenêtre.

      • Format 'texte brut':

      Dans Exafich, choisir 'Nouveau fichier' et ouvrir 'texte.txt'. Ce fichier contient le texte suivant :
      Ce fichier texte pur ne contient que les codes correspondants aux lettres du texte et à quelques caractères de contrôle comme le retour à la ligne ou la tabulation

      (vous pourriez le lire en l'ouvrant avec le bloc-note, et en sélectionnant dans celui-ci la police Terminal dans le menu Format pour voir correctement les caractères accentués).
    1. Le second mot 'texte' et le mot 'ligne' sont suivis de codes de contrôle permettant le retour à la ligne en début de ligne. Quels sont ces codes ?
    2. Avant le mot 'tabulation' se trouvent deux signes de tabulation. Quel est le code de contrôle de la tabulation ?
      Les caractères de contrôle sont aussi dits 'non imprimables' car ils correspondent à des commandes pour l'imprimante. Leurs codes sont compris entre 1 et 31 .

      • Format 'texte enrichi'

      Ouvrir à l'aide d'Exafich le fichier 'Enrichi.rtf'.
      Tous les traitements de texte un peu évolués (donc pas le bloc-note!) reconnaissent ce format et permettent d'afficher son contenu ainsi :

    3. Que contient le fichier en plus du texte ci-dessus ?
    4. Dans ce format : comment met-on en mot en italique ? En gras ?
       
      Remarque : le format RTF est codé 'en clair' et très facile à déchiffrer, son mode de codage est très proche de celui des pages Web (html). Si vous ouvrez avec exafich un fichier au format WordPro (*.lwp) ou Word (*.doc) vous constaterez que le codage en est beaucoup moins lisible!

  3.  Codage des images . Exemple du format Bitmap
    1. Le format Bitmap
      Bitmap signifie 'carte de bits'. C'est la façon la plus simple de coder une image : l'image est décrite point par point. Les points d'une image sont appelés des 'pixels': ce mot est la contraction de 'picture elements'. Chaque pixel est décrit par un nombre indiquant sa couleur. L'image est donc représentée par une série de nombre, chacun représentant la couleur d'un pixel. Les bitmaps existent sous différents formats, selon le nombre de couleurs possibles pour un pixel. Le fichier contient également un en-tête comprenant différents renseignements, tels que ses dimensions et son format. Le codage est simple mais l'image Bitmap occupe beaucoup de place mémoire: les pixels sont petits, donc nombreux! Nous allons essayer de décoder quelques uns de ces formats.
      Remarque : les résultats sont valables pour des Bitmaps non compressés, réalisés avec des programmes simples comme Paint.

        Lorsqu'on examine un bitmap avec Exafich, on peut le visualiser dans une petite fenêtre. Le bouton "+" permet de le voir agrandi 4 fois et le bouton "-" de revenir à la taille normale.
       
    2. Bitmap monochrome
      Ce format ne connaît que deux couleurs : noir et blanc.
      1. Combien faut-il de bits pour stocker la couleur d'un pixel dans ce format ?
      2. Combien de points peut-on décrire avec un octet ?
      3. Combien faut-il d'octets pour stocker une image de 800 sur 600 pixels (taille de votre écran) dans ce format ? Donner le résultat en octets puis en kilooctets.
         
          Les fichiers Noir01, Blanc01, Lignes 01 , Nb01 sont des bitmaps monochromes, de même taille, mais contenant des images différentes. Examiner chacun d'eux.
      4. Identifier l'en-tête de fichier : c'est la partie qui est identique dans les trois fichiers. Combien compte-t-elle d'octets dans le format monochrome?
         
          Le reste du fichier contient la description de l'image.
        Il est conseillé pour les questions suivantes d'utiliser l'affichage en hexadécimal et de "penser en base 2" !
      5. Quelle est la couleur correspondant à la valeur 0 ? À la valeur 1 ?
      6. Quelle suite de digits binaires utilise-t-on pour décrire une alternance de points blancs et noirs ? Quelles sont les deux valeurs possibles pour un octet décrivant une alternance de points blancs et noirs ? (donner cette valeur en binaire, puis en hexadécimal) .
      7. Ecrire en hexadécimal
        1. la suite d'octets binaires représentant une suite de 32 points noirs.
        2. la suite d'octets binaires représentant une suite de 32 points blancs.
        3. la suite d'octets binaires représentant une suite de 32 points alternativement blancs et noirs, commençant par un point blanc
        4. la suite d'octets binaires représentant une suite de 32 points alternativement blancs et noirs, commençant par un point noir.
      8. Le fichier 'ligne01' représente une alternance de lignes noires et blanches. D'après les réponses à la question 7, les points d'une image sont-ils lus par ligne ou par colonne ?
      9. De haut en bas ou de bas en haut ?
      10. Le fichier Nb01 comprend des lignes de points alternativement blancs et noirs. D'après les réponses à la question 7, les points de l'image sont-ils lus de droite à gauche ou de gauche à droite ?
         
        Dans tous les autres formats de bitmap les données image se trouvent également à la fin du fichier et se lisent de la même façon. (sauf si le bitmap est compressé)
    3. Éléments de l'en-tête
        Pour cette partie il est conseillé d'utiliser plutôt l'affichage en base 10.
      1. Quels sont les caractères correspondant aux deux premiers octets de l'en-tête ? Que signifient ces deux octets ?
      2. Les fichiers noir01, noir01_1616 et noir01_800 sont des fichiers monochromes de dimensions différentes. En examinant sa valeur pour ces trois fichiers, déterminer ce que représente le troisième octet de l'en-tête.
      3. Le nombre de digits nécessaires pour décrire un pixel est également stocké dans l'en-tête. Trouver où ! ( Les fichiers noir01,bmp4,bmp8 et bmp24 sont codés respectivement sur 1,4,8 et 24 bits)
         
        Ces résultats sont également valables pour les autres formats de bitmap.
         
    4. Bitmap 4 bits (la couleur d'un point est codée sur 4 bits)
      1. Combien de couleurs différentes peut-on coder sur 4 bits ?
      2. Combien de points peut-on décrire avec un octet ?
      3. Combien faut-il de digits pour écrire la couleur d'un point en hexadecimal ?
      4. Combien faut-il d'octets pour décrire une image de 800 sur 600 pixels avec ce format? Donner le résultat en octets, puis en kilooctets.
         
      5. Les fichiers NOIR4,BLANC4,JAUNE4,CYAN4,ROUGE4,VERT4,ROSE4,VIOLET4 et BMP4 sont des fichiers bitmap 4 bits de même taille. A l'aide de ces fichiers compléter le tableau ci-dessous (l'affichage en hexadecimal sous exafich est vivement recommandé !) , à l'exception des colonnes 'RVB'. Attention : le code hexa d'un point est constitué d'un seul digit (chiffre ou lettre) , et son code binaire de 4 bits.
         
        couleur Code (base 16) Code (base 10) Code (base 2) R V B couleur code (base 16) code (base 10) code (base 2) R V B
        noir             gris foncé            
        gris clair             blanc            
        bleu foncé             bleu vif            
        rouge foncé             rouge vif            
        vert foncé             vert clair            
        violet             rose            
        ocre             jaune            
        vert-bleu foncé             cyan            
      6. Qu'est-ce qui différencie les codes en base 2 des couleurs sombres de la colonne de gauche de ceux des couleurs claires correspondantes, qui sont écrites sur la même ligne dans la colonne de droite ? (le gris foncé est un 'noir clair' et le gris clair un 'blanc foncé')
      7. D'après le cours de Physique, quelle est la composition de la lumière blanche ?
         
      8. Regarder avec une loupe de fort grossissement (un viseur d'appareil photo jetable ou une petite goutte d'eau peuvent faire l'affaire) une zone blanche et une zone grise clair de l'écran. Les petits points de couleur sont les chromophores ('porteurs de couleur') de l'écran: un pixel contient 3 chromophores rouge, vert et bleu. Regarder ensuite une zone rouge, bleue, jaune ...de l'écran pour voir quels sont les chromophores allumés. Compléter les colonnes RVB (rouge, vert, bleu) en cochant pour chaque couleur les chromophores allumés.
      9. Identifier précisément le rôle de chacun des digits binaires du code d'une couleur en 4 bits.

    5.   Bitmap 24 bits.
      1. Combien peut-on coder de couleurs sur 24 bits ?
      2. Combien faut-il d'octets pour décrire une image de 800 sur 600 pixels avec ce format? Donner le résultat en octets, en kilooctets et en mégaoctets.
        Chacun des chromophores correspond à un octet. Ouvrir Paint, menu "Couleur", "Modifier les couleur", "Definir les couleurs personnalisées" : les valeurs écrites à droite en face de 'rouge','vert','bleu' correspondent aux valeurs des trois octets rouge, vert, bleu en codage 24bits.
      3. Quel est le code du blanc ? Du noir ?
      4. Comment obtient-on du gris ?
        Ce format de couleur est repris par de nombreux langages, en général en hexadécimal. Par exemple en HTML la valeur de couleur FFFFFF est du blanc, FF0000 du rouge vif, 00FF00 du vert et 0000FF du bleu vif.
      5. Quel sera en HTML le code du jaune vif ?

  4.   Codage des valeurs numériques
      Les entiers naturels peuvent être directement stockés en binaire. Les autres types de valeurs nécessitent un codage.
      Tous les formats numériques ont un point commun: une donnée occupe toujours le même nombre d'octets quelle que soit sa valeur. Par exemple la valeur 1 peut occuper 1,2,4,8 ou 16 octets suivant le format dans laquelle elle est codée.
    1. Codage des entiers négatifs (entiers signés)

      Le code adopté doit répondre à trois critères : Les nombres négatifs doivent pouvoir être distingués des positifs.
      La somme d'un nombre et de son opposé est nulle.
      L'opposé de l'opposé d'un nombre est égal à ce nombre

      Le codage adopté est celui-ci (exemple des entiers occupant un octet):
      Les nombres positifs ne peuvent prendre que les valeurs 0 à 127, le digit le plus à gauche de ces nombres est donc toujours nul.
      Par exemple 00011110 est positif, 10001100 ne l'est pas.
      Ces nombres positifs se lisent comme les nombres binaires ordinaires (00011110 vaut 30 en base 10).
      Pour obtenir l'opposé d'un nombre, qu'il soit positif ou négatif, on procède en deux étapes.
             - On inverse tous les digits de ce nombre , en remplaçant les 1 par des 0 et les 0 par des 1.
             - On ajoute 1 au nombre obtenu.
      Par exemple l'opposé de 00011110 est égal à 11100001+1=11100010. 11100010 se lit donc -30.
      L'opposé de 10001100 est égal à 01110011+1=01110100 et vaut donc 116 en base 10.
      Par conséquent, 10001100 se lit -116.
      Avec ce système, tous les nombres négatifs commencent par un 1 (digit de gauche)

      Il est évidemment impératif de savoir à l'avance si on doit lire le nombre comme un nombre binaire ordinaire ou comme un entier signé !
      Attention : pour connaître la valeur en base 10 d'un nombre négatif, il faut déterminer son opposé, lire la valeur de celui-ci et lui mettre un signe - (ou utiliser la méthode rapide que l'on verra un peu plus loin)
    2. Vérification des critères :
      • Les nombres négatifs doivent pouvoir être distingués des positifs : c'est exact, les premiers commencent par un 1 et les seconds par un 0
      • La somme d'un nombre et de son opposé est nulle. Vérifiez, en additionnant 00011110 et 11100010 , ou 10001100 et 01110100 . L'addition se pose exactement comme en base 10, avec des retenues (1+1=10, je pose 0 et je retiens 1....). Il y a évidemment une astuce : le résultat de l'addition s'écrit lui aussi sur un octet, la dernière retenue n'apparaîtra donc pas dans ce résultat !
      • L'opposé de l'opposé d'un nombre est égal à ce nombre : en utilisant la méthode décrite, prenez l'opposé de 11100010, puis celui de 01110100, et vérifiez que le premier est 00011110 et le second 10001100.
      Ce codage serait sans intérêt s'il ne permettait pas de faire des calculs. Vérifiez que la somme de 11100010 (-30) et 01110100 (116) se lit bien 86, et que celle de 10001100 et 00011110 se lit bien -86.
    3. Quel est le plus grand nombre positif que l'on peut écrire dans un octet, avec ce codage ?
    4. Comment s'écrit son opposé ?
    5. Prendre l'opposé de 10000000 . Que constate-t-on ?
    6. Ajouter 10000000 et 01111111. Que vaut le résultat ? Quelle valeur faut-il attribuer à 10000000, avec ce codage ?
    7. Combien de valeurs numériques peut-on écrire dans un octet, avec ce codage ? Comparer au binaire ordinaire.
       
      Ces propriétés sont à la base d'une méthode de conversion rapide des nombres négatifs en base 10 .
      Puisque 10000000 vaut -128 et qu'on peut faire des additions de la manière habituelle, on peut trouver la valeur de l'octet 1xxxxxxx (les x étant des digits binaires) en convertissant xxxxxxx en base 10 et en soustrayant 128 au résultat.
      En effet quel que soit xxxxxxx, 1xxxxxxx=10000000 + 0xxxxxxx ;

      Exemple :
      pour convertir 10011100 on cherche la valeur des 7 digits de droite (28 en décimal) puis on soustrait 128, et on trouve -100.
  5.  Les nombres décimaux.


 
  Réponses
 
© 2004 Scientillula.net