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