Pour mes étudiants

circuits logiques

Chapitre 1 : Codage – Systèmes de numérotation

1. Introduction

Un ordinateur ou toute autre machine à processeur, ne sait manipuler que des informations codées sous forme d’une suite de « 0 » et de « 1 ». Il faut donc passer de la représentation graphique adoptée par l’humain (lettres, chiffres, ponctuations) à une représentation binaire où à chaque lettre, chiffre ou ponctuation est associée une combinaison formée d’un certain nombre de bits 0 et 1.Cette opération est appelée codage.

2. Codage des caractères

Le codage ASCII (American Standard Code for Information Interchange) étendu est sans doute le codage le plus utilisé. Il établit une correspondance entre le caractère alphanumérique et son code appelée jeu de caractères codés (Charset en anglais). Le jeu de caractères ASCII comprend au début 128 caractères uniquement, numérotés de 0 à 127 et codés sur 7 bits, soit 27.

Cependant, comme le mot informatique utilisé par l’ordinateur est le byte (8bits), soit un nombre de bits multiple de huit, les caractères ASCII sont codés sur un octet, le bit de poids fort est utilisé en tant que bit de parité pour la détection d’erreurs.

Le jeu de caractères codé ASCII comprend :

  • Les 26 lettres de l’alphabet latin (majuscules et minuscules),
  • Les dix chiffres (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)  
  • Les symboles de ponctuation, parenthèses, crochets et accolades
  • Certains autres symboles

Ce jeu se divise en deux grandes catégories de caractères :

  • Les caractères de contrôles : Ils ont des codes compris entre 0 pour le caractère Null et 31 pour le caractère US (Unit Separator) plus le code 127 pour le caractère DEL .Le codage des caractères de contrôle est contenu dans le tableau de la figure 1.
  • Les caractères imprimables : Ils ont des codes compris entre 32 pour le caractère espace et 126 pour le caractère tilde ~. Le codage des caractères imprimables est contenu dans le tableau la figure 2.

Le jeu de caractères du code ASCII permet d’écrire des textes en anglais mais ne suffisait pas pour coder certains caractères utilisés dans les langues latines tels que les caractères accentués par exemple. C’est pourquoi le code ASCII a connu très rapidement plusieurs extensions dont la principale est certainement la famille des codes ISO 8859 qui comprend 16 pages de codes connues sous le nom de l’ISO/CEI 8859.

L’ISO 8859 ou ISO/CEI 8859, est une norme élaborée par l’ISO (International Organization for Standardization) et la CEI (Commission Electrotechnique Internationale)  pour le codage de caractères sur 8 bits pour le traitement informatique du texte. Cette norme comprend 16 parties connues sous le nom ISO 8859-n où n est un nombre variant de 1 à 16.Les parties suivantes sont citées à titre d’exemple.

  • ISO/CEI 8859-1 (latin-1 ou européen occidental : Allemand, Anglais, Espagnol etc.). Il s’agit d’une extension d’ASCII qui comporte 191 caractères imprimables. Elle permet d’écrire la plupart des langues d’Europe de l’Ouest. Pour le français à titre d’exemple, il ne manque que le caractère œ.
  • ISO-8859-15 ou Latin-9 : Cette norme modifie légèrement l’ISO/CEI 8859-1 en rajoutant pour le français par exemple le caractère œ et le symbole monétaire € (Euro).
  • Windows-1252 : Cette norme est parfois appelée ANSI du nom de l’organisme américain de standardisation
  • ANSI (American National Standards Institute). Elle comporte 218 caractères imprimables. C’est une extension du latin-1 en y rajoutant œ, €, points de suspension, guillemets anglais, signe (‰), etc.
  • ISO/CEI 8859-6: Arabe
  • ISO/CEI 8859-8: Langue hébraïque moderne
  • Etc.

L’Unicode

Chacune des extensions du code ASCII est spécialisée pour un jeu de caractères propre à une langue. Il n’est donc pas possible de coder dans un même document des textes rédigés avec des alphabets de langues aussi différentes que le latin, l’arabe ou le chinois à titre d’exemple.

Il a donc fallu trouver un code capable de représenter tous les caractères de toutes les langues. En 1990, le Consortium Unicode a développé un code standard sous le nom d’Unicode permettant de donner à tout caractère de n’importe quelle langue un code unifié abstraction faite de la plate-forme informatique ou le logiciel utilisés.

Unicode, dont la dernière version 12.1 date du 7 Mai 2019 recense environ 137929 caractères et attribue à chacun d’eux un nom et un numéro (appelé point de code) le plus souvent exprimé en hexadécimal. Le tableau de la figure 4 en donne quelques exemples :

Il est à remarquer qu’Unicode donne un nom à chaque caractère recensé et lui attribue un numéro mais il ne spécifie pas comment ce caractère doit être codé en informatique.

Il existe plusieurs codages des caractères Unicode dont les plus connus sont les codages UTF (Universal Character Set Transformation Format) tels que :                                 

  • UTF-32 qui code chaque caractère sur 32 bits
  • UTF-16 qui code chaque caractère sur 16 ou 32 bits
  • UTF-8 qui code chaque caractère sur 8, 16, 24 ou 32 bits.

UTF-8 est de nos jours le codage le plus utilisé surtout sur le web (On estime que plus de 90% des pages sur le Web sont actuellement en UTF-8). Il est en effet nécessaire de savoir dans quel codage est enregistré un document (une page HTML par exemple), pour que les navigateurs web puissent afficher les bons caractères à l’écran.

Développé par l’ISO (ISO/CEI 10646), UTF-8 est compatible avec Unicode tout en restant compatible avec l’ASCII (Les caractères dont les numéros sont compris entre 0 et 127 sont ceux du code ASCII).

3. Systèmes de numérotation

3.1.Système binaire

En tant qu’êtres humains, nous sommes habitués à utiliser le système de numération en base 10 (système  décimal ).Dans ce système, il y a dix chiffres (0,1,2,3,4,5,6,7,8, 9) avec lesquels nous pouvons écrire n’importe quel nombre mais nous pouvons également compter et faire des opérations d’addition ,de soustraction ,de division, de multiplication, etc.

Mais dès lors que nous faisons appel à des machines à processeurs, le système décimal ne convient plus. En effet, les processeurs manipulent uniquement deux chiffres 0 et 1 avec lesquels, un processeur peut aussi écrire n’importe quel nombre et faire toutes les opérations arithmétiques. C’est le système de numération en base 2 ou système binaire.

3.2. Système hexadécimal

Nous utilisons aussi fréquemment le système hexadécimal dit base 16 essentiellement parce qu’il est plus simple à utiliser que le binaire. Ce système utilise 16 chiffres allant de 0 à 15 mais pour éviter toute confusion les chiffres 10 à 15 sont remplacés par des lettres comme suit : 10 = A ; 11 = B ; 12 = C ; 13 = D ; 14 = E et 15 = F

Conversion binaire-décimal

Soit le nombre en base 2 : 10011010

Conversion décimal-binaire

Prenons comme exemple le nombre 97 en base 10. La méthode consiste à faire une suite de divisions euclidiennes par 2 du nombre en base 10 à convertir en base 2.

Pour avoir le résultat en binaire, il faut écrire les restes des divisions successives en commençant par le dernier reste de la dernière division. Dans notre exemple, nous obtenons 97 en base 10 = 1100001 en base 2.

Conversion hexadécimal-décimal

Soit le nombre en base 16 : 40BA2F

Conversion décimal-hexadécimal

Prenons comme exemple le nombre en base 10 : 2462. La méthode consiste à faire une suite de divisions euclidiennes par 16 du nombre en base 10 à convertir en base 16.

Pour avoir le résultat en hexadécimal, il faut écrire les restes des divisions successives en commençant par le dernier reste de la dernière division. Dans notre exemple, nous obtenons : 2462 en base 10 = 99E en base 16.

Prenons un autre exemple. Soit le nombre décimal 4241967 et trouvons sa valeur en hexadécimal en appliquant la même méthode que précédemment.

4241967 en base 10 s’écrit 40BA2F en base 16.

Conversion hexadécimal-binaire

Prenons comme exemple le nombre en base 16 : 2AB2 et convertissons-le en base 2. La méthode consiste à remplacer chaque chiffre par sa valeur en binaire sur quatre bits.

2AB2 en hexadécimal s’écrit donc 0010101010110010 en binaire ou en omettant les 0 qui sont à gauche 10101010110010.

Conversion binaire-hexadécimal

Prenons comme exemple le nombre 10110101101011 en base 2 et convertissons-le en hexadécimal. La méthode consiste à regrouper les bits par groupe de quatre en commençant par la droite et en assignant à chaque groupe sa valeur en hexadécimal.

Le nombre en binaire 10110101101011 s’écrit en hexadécimal 2D6B

Opérations arithmétiques dans le système binaire

Addition

Pour additionner deux nombres binaires, on applique le même principe utilisé dans le système décimal mais en remplaçant la base 10 par la base 2. On écrit les nombres l’un en dessous de l’autre puis on additionne les chiffres en partant de la droite sachant que 0 + 0 = 0 ; 0 + 1 = 1 ; 1 + 0 = 1 et 1 + 1 = 0 et on retient 1.

Soit à additionner les deux nombres en base 2 suivants 101010110 et 1101011

Prenons un autre exemple : Soit à additionner les trois nombres en base 2 suivants : 111 ; 101 et 110.

Remarque : Dans la dernière colonne de l’addition précédente, on a 1 + 1 + 1 + 1 et une retenue de 10. Comme c’est la dernière retenue, on doit mettre 0 dans la colonne située immédiatement à gauche et 1 dans celle qui suit.

Soustraction

On procède de la même façon que pour l’addition sachant que 0 – 0 = 0 ; 0 – 1 = 1 (après avoir emprunté 1) ; 1 – 0 = 1 et 1 – 1 = 0. Soit à soustraire le nombre 1101011 du nombre 101010110.

Multiplication et Division

La division et la multiplication dans le système binaire se calculent également selon les règles utilisées dans le système décimal. Soit à multiplier les deux nombres suivants : 1100101 et 1101.

Soit à diviser le nombre binaire 1100101 par le nombre binaire 1101.

Opérations arithmétiques dans le système hexadécimal

Les mêmes règles arithmétiques sont appliquée mais en faisant remarquer que nous avons une retenue de 1dans la colonne de gauche à chaque fois dépasse le chiffre hexadécimal F sachant que F= 15 en décimal. Soit à additionner les deux nombres hexadécimaux 4AD2 et A2FF.

Soit maintenant à soustraire le nombre hexadécimal 3D4 du nombre hexadécimal EF2.

Exercices de compréhension

1. Sous Windows allez dans invite de commandes. Dans la console qui apparait tapez charmap. Cocher Affichage avancé. Sélectionnez DOS : Etats-Unis. Regardez le nombre de caractères contenu dans ce type de codage. Sélectionnez ensuite Unicode et comparez le nombre de caractères contenu dans Unicode avec celui de DOS : Etats-Unis. Expliquez la différence.

2. En consultant la table ASCII de la figure 2, on voit que la lettre F est codée par le nombre décimal 70. Sous Windows, tout en maintenant la touche Alt enfoncée, tapez le nombre 70 puis relâchez. Notez la lettre affichée à l’écran. Avec quel nombre est codée la lettre F dans Unicode ? Comparer ce nombre avec le nombre 70.Expliquez.Combien d’octets l’encodage UTF-8 utilise-t-il ?

3. Retrouvez le texte dont le codage ASCII sept bits est 010000110010011101100101 011100110111010000100000011001100110000101100011011010010110110001100101

4. Convertissez les nombres décimaux suivants en binaire puis en hexadécimal :

  • 145
  • 1457
  • 158796

5. Effectuez les opérations arithmétiques suivantes dans le système binaire :

  • 101101010 + 1001111
  • 1011011011 – 111001
  • 1011111 :  11101
  • 10111101 x 1101

6. Effectuez les opérations arithmétiques suivantes dans le système hexadécimal :

  • 4FFG21A + 1234F
  • 4FFG21A  – 1234F