Codage de l`information
Transcription
Codage de l`information
Codage de l’information Édition au 21-mars-14 L’informatique est la science du traitement automatisé de l’information (data processing). L’ordinateur (mot créé en 1954 par M.J. Perret -professeur de lettres à la Sorbonne- à la demande d’IBM) est une machine, constituée de nombreux composants électroniques, permettant ce traitement automatique de l’information. Ce traitement, représenté dans la figure 1, consiste à produire des résultats par manipulation de données, ces résultats pouvant bien entendu constituer de nouvelles données à traiter… Figure 1 – l'informatique Le terme anglais de computer (= calculateur) lui donne un sens plus réduit que le vocable français. Les données à traiter peuvent être très diverses (textes, nombres, images, informations codées fournies par des capteurs extérieurs,…) ainsi que les résultats produits par le traitement (éditions sur écran, imprimante, mais aussi commande d’une machine, d’un robot, …). 1. mode de représentation élémentaire dans l’ordinateur Dans l’ordinateur, les informations sont codées sous forme électrique dans une logique à deux états : • pas de courant (en fait ddp environ 0 V), c’est l’état 0 • du courant (en fait ddp environ 5 V ou 3 V), c’est état 1 Il s’agit donc d’un système (ou d’une logique) binaire qui est utilisé pour coder toutes les informations à manipuler. Cet élément de base de la représentation de l’information dans l’ordinateur est appelé BIT (binary digit en anglais et élément binaire en français.) Remarquons qu’il existe de nombreux autres systèmes de codage, par exemple avec 26 lettres on peut coder toutes les subtilités de la langue française, (il suffit de les combiner sous forme de mots… et d’y ajouter des caractères de ponctuations, des accents…) ; il en est de même de la diversité des êtres vivants codée à l’aide de mots de trois lettres prises parmi quatre (triplet du code génétique). La représentation de messages complexes nécessitera bien évidemment des suites ordonnées de 0 et de 1 très nombreux. Ces séquences sont, pour faciliter la manipulation et la compréhension, rassemblées en mots de longueur variable, multiples de 8 : • OCTETS (mots de 8 bits) Qu'est-ce qu'un octet ? Les octets sont des mots de 8 bits, c’est à dire que l’on peut les représenter par une succession ordonnée de huit 0 ou 1. Cette représentation correspond à l’utilisation des nombres en base 2. Cette suite est ordonnée comme les nombres traditionnels. On parle de bit de poids fort pour le premier (ou les quatre premiers) situé à gauche et de bit de poids faible pour le dernier (ou les quatre derniers) situé à droite. Quelques exemples de mots de 8 bits et de leur équivalent décimal : 0000 0000 (0) 1111 1111 (255) 0110 1011 (107) 1 Le nombre de mots différents est de deux mots pour 1 bits (0 et 1) soit 2 , quatre mots pour 2 bits (00, 01, 10, 11) soit 2 3 8 2 , huit mots de 3 bits (000, 001, 010, 011, 100, 101, 110, 111) soit 2 … Par récurrence, le nombre d'octets est de 2 = 256, de 0000 0000 (0 en système décimal) à l’octet 1111 1111 (255 en système décimal). Le nombre décimal correspondant à un nombre binaire est calculable par l’opération suivante : 1 soit hgfe dcba le nombre binaire le nombre décimal est égal à 0 1 2 3 4 5 6 7 (a.2 ) + (b.2 ) + (c.2 ) + (d.2 ) + (e.2 ) + (f.2 ) +(g.2 ) +(h.2 ) 7 6 5 4 3 2 1 0 ou (h.2 )+ (g.2 )+ (f.2 )+ (e.2 )+ (d.2 )+ (c.2 )+ (b.2 )+ (a.2 ) soit dans l’exemple ci-dessus : 0 1 2 3 4 5 6 7 (1.2 ) + (1.2 ) + (0.2 ) + (1.2 ) + (0.2 ) +(1.2 ) + (1.2 ) +(0.2 ) = 1 + 2 + 0 + 8 + 0 + 32 + 64 + 0 = 107 Cette opération est identique en base dix dans laquelle 10 remplace 2 : 0 1 2 (7.10 ) + (0.10 ) + (1.10 ) = 107 Représentation en hexadécimal Les nombres binaires étant difficiles à manipuler on préfère souvent utiliser le système hexadécimal, c’est à dire la base 16 composée de chiffres allant de 0 à “15” avec pour les chiffres supérieurs à 9 les symboles A (10), B (11), C (12), D (13), E (14), F (15). Dans ces conditions un mot de 4 bits est représenté par un chiffre hexadécimal et un octet par deux chiffres hexadécimaux. Dans l’exemple ci-dessus, le nombre binaire 0110 1011 est divisé en 0110 (soit 6 en décimal et 6 en hexadécimal) et 1011 (soit 11 en décimal et B en hexadécimal) donc 6B en hexadécimal. La plupart des calculatrices permettent de faire des calculs dans les bases de votre choix, binaire, octale (base 8), décimale et hexadécimale. Conversion de base (décimal en hexadécimal) CONVERTIR de base 10 en base 16 : Pour convertir de base 10 en base 16, on réalise la division entière du nombre décimal par la valeur de la base (16). Le reste obtenu est le dernier chiffre. L’opération est recommencée sur le quotient jusqu’à ce que ce quotient soit inférieur à 16, valeur de la base, les différents restes prenant place devant le premier chiffre trouvé. Ces chiffres sont écrits avec les symboles correspondant à la base 16. Ex : conversion du nombre 724. Figure 2 – Conversion de base d'un nombre décimal Note : en remplaçant 16 par un autre nombre représentant une base, on pourra convertir dans cette base par la même opération. Les octets peuvent être rassemblés en mots plus importants : • mots de 16 bits allant de 0000 à FFFF en hexadécimal (65 535 en décimal) et donc composés de 2 octets. Le nombre de mots de 16 16 bits est de 2 = 65536 mots différents. • mots de 32 bits et donc composés de 4 octets Les microordinateurs actuels manipulent les bits par mot de 16 ou de 32 bits bientôt 64. Les gros ordinateurs utilisent des mots de 32 bits ou de 64 bits habituellement. Le nombre de mots de 16 bits est de 2 32 = 4 294 967 296 soit environ 4 milliards ! 2 2. représentation des caractères (code ASCII, Unicode) (voir aussi caractères dans la partie Texteur) Les textes sont représentés par des lettres et des signes divers de ponctuation, des chiffres… On appelle caractères ces différents éléments et leur codage est réalisé actuellement à l’aide de mots de 8 bits : des octets. Il a donc fallu une normalisation pour que les différents ordinateurs communiquent sans problèmes et elle a abouti au code ASCII (sigle de l’American Standard Code Information Interchange). Ce code ASCII a été créé par les Étatsuniens : la langue anglaise n'ayant pas de caractères particuliers, un mot de 7 bits suffit à coder tous ses caractères. La norme ASCII n'est donc normalisée que 0 à 127 (les sept derniers bits de l’octet). Pour écrire dans d'autres langues comme le français, il faut ajouter les caractères particuliers ce ces langues. Pour les langues latines ce sont les lettres accentuées et bien d'autres caractères : ñ, ô, æ, î, Ú, Â, œ, î, ê, Ï, ¿, õ, î ,Ò, ß,… ème chacun devant être codé par un octet. On utilise donc le 8 bit pour cela (code Ascii étendu, mal normalisé). Bien entendu, les langues slaves, grecques, asiatiques… ajoutent à la complexité du codage. Le code ASCII Ce code ASCII étendu comprend 256 caractères se décomposant en : • une série, de 0 à 31, de caractères de contrôle permettant diverses opérations sur les communications entre éléments de la machine, des marquages (comme les caractères 13 = retour en début de ligne et 10 = saut à la ligne, envoyés par la touche <return> ou <entrée>), ou encore l’activation du haut-parleur (BIP, caractère dit “BEL” de code 7)… Dans le tableau ci-dessous, les sigles à 2 ou 3 caractères sont les mnémoniques des caractères de contrôle. BEL c'est le bip, LF pour Line Feed provoque un changement de page sur l'imprimante, CR pour Carriage return marque la fin de paragraphe, ESC représente l'échappement (escape).La signification des autres sigle sera trouvée dans Wikipedia… 0= 1= 2= 3= 4= 5= 6= 7= 8= 9= 10 = 11 = 12 = 13 = 14 = 15 = NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 16 = 17 = 18 = 19 = 20 = 21 = 22 = 23 = 24 = 25 = 26 = 27 = 28 = 29 = 30 = 31 = DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US Sont ensuite codés : • les signes de ponctuation et d’autres signes de 32, (espace) à 47, de 58 à 64, de 91 à 96 et de 123 à 127 32 = 33 = 34 = 35 = 36 = 37 = 38 = 39 = 40 = 41 = 42 = 43 = 44 = 45 = 46 = 47 = ! " # $ % & ' ( ) * + , - . / 58 = 59 = 60 = 61 = 62 = 63 = 64 = 91 = 92 = 93 = 94 = 95 = 96 = : ; < = > ? @ [ \ ] ^ _ ` 123 = 124 = 125 = 126 = 127 = { | } ~ Attention, le caractère 127 correspond à "delete" (supprimer). • les chiffres, de 48 (chiffre 0) à 57 (chiffre 9) 48 = 49 = 50 = 51 = 52 = 53 = 54 = 55 = 56 = 57 = 0 1 2 3 4 5 6 7 8 9 • les lettres majuscules, de 65 (A) à 90 (Z) 65 = 66 = 67 = 68 = 69 = 70 = 71 = 72 = 73 = 74 = 75 = 76 = 77 = 78 = 79 = A B C D E F G H I J K L M N O 80 = 81 = 82 = 83 = 84 = 85 = 86 = 87 = 88 = 89 = 90 = P Q R S T U V W X Y Z 3 • 97 = 98 = a b les lettres minuscules, non accentuées, de 97 (a) à 122 (z), décalées de 32 par rapport aux majuscules (code de A = 65, code de a = 65+32 = 97). 99 = 100 = 101 = 102 = 103 = 104 = 105 = 106 = 107 = 108 = 109 = 110 = 111 = c d e f g h i j k l m n o 112 = 113 = 114 = 115 = 116 = 117 = 118 = 119 = 120 = 121 = 122 = p q r s t u v w x y z • puis, au-delà de 127, sans norme admise par tous, différents caractères non utilisés dans la langue anglaise, avec en particulier les caractères accentués ou spéciaux (ñ, ç, ß…) en minuscules ou en majuscules, des ligatures (compression de deux lettres comme fl devenant fl), des symboles particuliers… ce qui pose parfois des problèmes délicats pour la communication entre deux ordinateurs de standards différents : MS-DOS, Windows95 (norme ANSI) et MacOS n'utilisent pas les mêmes valeurs. On a alors recours à des logiciels de transcodage. De toutes façons, si les langues latines et anglosaxonnes sont faciles à coder sur 256 caractères, il n'en va pas de même si l'on souhaite utiliser d'autres alphabets (cyrillique, arabe, idéogrammes chinois,… C'est pourquoi, au niveau 16 international, un nouveau code sur 16 bits a été adopté, Unicode, qui permet de coder 2 = 65536 signes. Un texte unique pourra ainsi contenir tous les caractères sans devoir passer par des artifices complexes. L’intérêt est particulièrement important pour certaines langues étrangères (chinois et autres langues à idéogrammes) et pour l’imprimerie (ligatures, association de deux lettres comme “fi” ou “fl”, symboles ¶, ∞, ±,…) mais aussi pour introduire dans un texte donné des caractères n’existant pas dans la langue ou du moins dans les 256 premiers codes. Tableau global Les tableaux suivants montrent ces codes. 0= 1= 2= 3= 4= 5= 6= 7= 8= 9= 10 = 11 = 12 = 13 = 14 = 15 = NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 16 = 17 = 18 = 19 = 20 = 21 = 22 = 23 = 24 = 25 = 26 = 27 = 28 = 29 = 30 = 31 = DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 32 = 33 = 34 = 35 = 36 = 37 = 38 = 39 = 40 = 41 = 42 = 43 = 44 = 45 = 46 = 47 = ! " # $ % & ' ( ) * + , - . / 48 = 49 = 50 = 51 = 52 = 53 = 54 = 55 = 56 = 57 = 58 = 59 = 60 = 61 = 62 = 63 = 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 64 = 65 = 66 = 67 = 68 = 69 = 70 = 71 = 72 = 73 = 74 = 75 = 76 = 77 = 78 = 79 = @ A B C D E F G H I J K L M N O 80 = 81 = 82 = 83 = 84 = 85 = 86 = 87 = 88 = 89 = 90 = 91 = 92 = 93 = 94 = 95 = P Q R S T U V W X Y Z [ \ ] ^ _ 96 = 97 = 98 = ` a b 99 = 100 = 101 = 102 = 103 = 104 = 105 = 106 = 107 = 108 = 109 = 110 = 111 = c d e f g h i j k l m n o 112 = 113 = 114 = 115 = 116 = 117 = 118 = 119 = 120 = 121 = 122 = 123 = 124 = 125 = 126 = 127 = p q r s t u v w x y z { | } ~ Figure - Table des caractères : partie normalisée (représentée en base 16…) Remarque : Le code 0 sert de premier code aux touches de fonctions. Les touches des flèches de direction sont codées, soit comme celles de fonction (deux codes successifs), soit comme des touches à un seul caractère …selon qu’elles appartiennent au clavier numérique ou au clavier spécial ! Code ASCII étendu : partie non normalisée (ou mal normalisée) Les deux tableaux suivants montrent les codes des deux principaux environnements dans l'alphabet Latin 1 : Sous Windows 4 Figure - Table des caractères : partie non normalisée sous Windows95 (ANSI) Pour obtenir un caractère particulier sous Windows, il suffit, tout en maintenant la touche <ALT> enfoncée, de taper 0 suivi du code à 3 chiffres du tableau ANSI (sur le pavé numérique). <ALT> 0163 produit le symbole £. Sans le 0 de tête, c'est la table ASCII qui est utilisée. Sous MacOS 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 Ä Å Ç É Ñ Ö Ü á à â ä ã å ç é è 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 ê ë í ì î ï ñ ó ò ô ö õ ú ù û ü 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 † ° ¢ £ § • ¶ ß ® © ™ ´ ¨ ≠ Æ Ø 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 ∞ ± ≤ ≥ ¥ µ ∂ ∑ ∏ π ∫ ª º Ω æ ø 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 ¿ ¡ ¬ √ ƒ ≈ ∆ « » … À Ã Õ Œ œ 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 – — “ ” ‘ ’ ÷ ◊ ÿ Ÿ ⁄ € ‹ › fi fl 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 ‡ · ‚ „ ‰ Â Ê Á Ë È Í Î Ï Ì Ó Ô 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 Ò Ú Û Ù ı ˆ ˜ ¯ ˘ ˙ ˚ ¸ ˝ ˛ ˇ Figure - Table des caractères : partie non normalisée sous MacOS Norme UNICODE Comme précisé ci-dessus, la norme UNICODE permet de coder la plupart des langues et donc, si le système le peut, de mélanger des écritures différentes comme le japonais et l'anglais sur une page internet (voir figure). Deux exemples des caractères unicode normalisés pour des langues non latines. 5 Figure – Extrait de table Unicode des caractères Arabe et "Chinois" (mandarin). La valeur du code est obtenue en "ajoutant" les caractères horizontaux et le caractère vertical. Exemple FC40 (arabe) ou F941 (mandarin) Figure – page internet wikipedia sur les Oxyures avec un mélange de latin (langue utilisée pour nommer les êtres vivants) et japonais. 6 3. représentation des nombres La représentation de nombres entiers de 0 à 255 ne pose pas de problèmes… Il suffit d’un octet. On peut toutefois, avec un octet, représenter un nombre entre -127 et + 128, ou toute autre chose ! La représentation dépend donc du programme utilisé et de ses choix : 90 (5A en hexadécimal) peut représenter le nombre 90 ou le caractère Z. Par contre, la représentation des nombres supérieurs à 255, nécessite plus d’octets. Avec deux octets, on pourra coder les entiers de 0 à 65536 … ou de -32768 à 32767 ou tout autre possibilité… Chaque utilisateur peut ainsi, en principe, adopter son mode de présentation, ce qui gène les échanges : des normes sont indispensables. Un nombre réel devra être représenté autrement et l’infini ne sera pas accessible en raison du codage sur un nombre limité de bits. Les nombres réels sont compris par la machine dans leur notation scientifique du type ±n 1,234544 E+18 ou -1,234544 E-18 par exemple. Le nombre est donc écrit sous la forme ± a x 10 (n entier relatif) et comprend donc dans un ordre déterminé : un signe, une « mantisse ou significande a», l’exposant n et son signe (voir pour plus de détail un ouvrage spécialisé ou Wikipedia (mantisse)). Par exemple, de façon arbitraire… : Un nombre comme 3 -0,123000.10 sera donc décomposé en : • signe - : traduit en 0 • mantisse : 123000 traduite en nombre binaire. • signe de l’exposant : + traduit en 1 • exposant : 1, traduit en binaire. La précision dépend du langage utilisé et de la machine. En langage JAVA deux types de nombres réels suivant le standard IEEE 754 : -45 • les nombres réels de type FLOAT sont codés sur 32 bits (4 octets) : ils vont de -1,40239846.10 à 38 3,40282347.10 et donnent 9 chiffres significatifs. • les nombres réels de type DOUBLE sont codés sur 64 bits (8 octets) : ils vont -324 308 de -7,94065645841246544.10 à 1,79769313486231570.10 et donnent 18 chiffres significatifs. Même s'il est important, le nombre de chiffres significatifs reste limité. La représentation d'un nombre dans l'ordinateur est donc fondamentalement fausse… Une série de calculs successifs conduira à une accumulation d’erreurs pouvant affecter le résultat final. 23 -3 Essayez par exemple d'additionner 2.10 et 10 … Quand on compare un résultat de calcul et un nombre entier (1 par exemple), il n'est pas sûr que le nombre calculé soit égal à 1 même s'il apparaît sur l'écran égal à 1 (dans le tableur par exemple). Attention : on utilise souvent, comme sur les calculatrices, le point décimal, (à la place de la virgule). Toutefois, sous MacOS et sous Windows, l’utilisateur choisit le point ou la virgule dans un panneau de configuration adéquat. 7 4. représentation élémentaire d’autres objets Un seul exemple illustrera ce codage, toujours particulier, celui d’un son. Le son nommé « Oui », est codé (au moins pour le début) comme indiqué au dessous en hexadécimal d’une part, avec sa traduction en ASCII d’autre part. La première colonne représente les adresses des octets. On pourra modifier un son en manipulant ces données… Représentation interne dʼun son, de nom "Oui"… Le codage nʼest compréhensible que pour les logiciels mais on remarquera que lʼon peut modifier chaque octet du son… (extrait dʼune ressource son dʼun pile Hypercard à lʼaide de ResEdit® sur Macintosh) en hexadécimal en ASCII exemple du codage du son "Oui" enregistré à l'aide d'un microphone 5. Un autre type de codage : codes barre et QR code … Les code-barres ont envahi tout notre univers notamment au travers des produits de consommation qui sont tous ainsi identifiés. Ils sont conçus de façon complexe pour être lus et décodés par une lecteur laser (appareil de caisse ou douchette) qui peut lire dans n'importe quelle position pour un code de largeur quelconque et transformer le code en une suite de chiffres décimaux. Le produit est ainsi repéré et l'appareillage associé peut traiter l'information : affichage du prix et prise en compte de l'achat sur la note, direction d'une valise à l'aéroport ou d'une palette à l'usine, identification d'un prélèvement au laboratoire etc… Figure - Douchette Le système de codage utilise des barres verticales comme indiqué dans la figure reprise de la revue "La Recherche". figure – Code-barre L'idée de passer en deux dimensions pour intégrer une somme d'informations plus importantes est concrétisée aujourd'hui dans le QR Code (Quick Response Code) : 8 Un code QR généré Lecture par un téléphone avec une application Figure – Exemple de QR code et de son décodage Corrélats : Enregistrer/Ouvrir, Programmation, Numériser, 9 Produit de la lecture