L’INFORMATION
Techniques de Programmation L.Cuvillon, P. Graebling
Représentation des nombres
• Pendant de nombreux siècles, on a cherché la meilleure façon de représenter les nombres et les grandeurs.
• Peuples primitifs : alignement de bâtonnets
• Invention du zéro autorise un système de numération souple
Système décimal
Base du système de numération usuel est 10
• 10 doigts = auxiliaire de calcul
• Système décimal autorise la conception de machines à calculer mécaniques (Pascaline en 1645, Babbage & Ada Lovelace 1822)
4
Système décimal
Base du système de numération usuel est 10
• 10 doigts = auxiliaire de calcul
• Système décimal autorise la conception de machines à calculer mécaniques (Pascaline en 1645, Babbage & Ada Lovelace 1822)
6
– Existence de systèmes physiques à 2 états d’équilibre
(circuits électroniques (mémoires)) impose l’utilisation de systèmes de numération différents : binaire
Système décimal
(puissance de 10) Exemple : 1248 (10)
1248 = 1000 + 200 + 40 + 8
= 1.10 3 + 2.10 2 + 4.10 1 + 8.10 0
• digits utilisés : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Principe identique pour toutes les bases
Système décimal
Un nombre entier est représenté de façon unique par une expression de la forme :
N = an.pn + an-1.pn-1 + ... + a0.p0 (0 < ai < p -1)
* p : base
* a i : digits
* notation : an an-1...a0
8
chiffre de poids le plus fort (MSD: most significant digit)
chiffre de poids le plus faible (LSD: lest significant digit)
Système binaire
Calculateurs à 2 états d’équilibre
Utilisation de 2 digits : 0 et 1 (bits = binary digits)
Exemple : 10010101 (2)
10010101 (2) = 1.2 7 + 1.2 4 + 1.2 2 + 1.2 0
= 128 + 16 + 4 + 1 = 149 (10)
Systèmes octal et hexadécimal
• Longueur des nombres en binaire et la confusion qui en résulte utilisation de bases plus pratiques
Système octal (base 8)
Système hexadécimal (base 16)
Exemples :
– 225 (8) = 2.8 2 + 2.8 1 + 5.8 0 = 128 + 16 + 5 = 149 (10) – 95 (16) = 9.16 1 + 5.16 0 = 144 + 5 = 149 (10)
Systèmes octal et hexadécimal
• Digits en base 8 : 0, 1, 2, 3, 4, 5, 6, 7
• Digits en base 16 : 0, 1, 2, ... 8, 9, A, B, C, D, E, F
12
Les bases utilisées sont des puissances de deux
Conversion avec système binaire immédiate
Exemple :
2AC (16) = 2.16 2 + 10.16 1 + 12.16 0
= 512 + 160 + 12 = 684 (10)
Systèmes octal et hexadécimal
•
FF
(16)=
(10)•
57
(16)+ 1 =
(16)=
(10)•
59
(16)+ 1 =
(16)=
(10)•
9F
(16)+ 1 =
(16)=
(10)•
71
(8)=
(10)•
57
(8)+ 1 =
(8)=
(10)EXERCICE
255
58 88
A0 160 5A 90
57
60 48
Systèmes octal et hexadécimal
•
AE
(16)+ 5 =
(16)=
(10) •35
(8)+ 3 =
(8)=
(10)14
EXERCICE 2
B3 179 40 32
Changements de base
Base p Base 10 : trivial
• 10010101 (2) = 1.2 7 + 1.2 4 + 1.2 2 + 1.2 0
= 128 + 16 + 4 + 1 = 149 (10)
• 225 (8) = 2.8 2 + 2.81+ 5.8 0 = 128 + 16 + 5 = 149 (10)
• 95 (16) = 9.16 1 + 5.16 0 = 144 + 5 = 149 (10)
Changements de base
Base 10 Base p : divisions successives
16
48 2
24 2 0
12 2 0
6 2 0
3 2 0
1 2 1
0 1
48
(10)= 110000
(2)Changements de base
Base 10 Base p : divisions successives
135 8
16 8 7
2 8 0
0 2
135
(10)= 207
(8)3115 16
194 16 11
12 16 2
0 12
3115
(10)= C2B
(16)Changements de base
Base 2 Base 8 Base 16
simples si les bases sont des puissances de deux
18
base 8 = base 2 3
1 0 0 1 0 1 0 1 2 2 5
base 16 = base 2 4
1 0 0 1 0 1 0 1
9 5
• 1 octet (byte en anglais) = 8 bits
• Systèmes informatiques travaillent sur des mots de longueur fixe (8, 16, 32 ou 64)
• De manière générale :
Nombre d’octets valeurs décimales
1 octet 0 à 255 ou -128 à +127 (256 codes!)
2 octets 0 à 65535 ou -32768 à +32767 4 octets 0 à 4 294 967 295 ou ....
• Possibilité d’une dépassement d’entier (integer overflow):
si mot trop petit pour stocker le résultat de l’opération
Ø En général: conservation des LSD bits, équivaut à modulo %(2n)
Octets - Mots
• 1 KB= 1Ko = 210 octets = 1024 octets
• 1 MB= 1Mo = 1024 Ko = 220 octets = 1 048 576 octets
• 1 GB= 1 Go = 230 octets
• La convention des programmeurs, des systèmes d’exploitations, des mémoires (RAM,Flash)
• Or les fabricants de disques durs (!) et la norme SI:
• 1 kB= 1ko = 1000 octets
• 1 GB= 1Go = 109 octets (=0.93 * 230 octets)
Ø introduction de notations peu usitées pour différencier
• KiB (Kio)= 1 kibi octet = 210 octets pour faire la différence
• 1 MiB = 1 mebi octet = 220 octets
Octets - Mots
20
Nombres négatifs
(binaire)(Illustrés ici pour l’exemple sur des mots de 4 bits , mais valable pour n bits)
• Solution immédiate : le MSD pour le 1 bit de signe 0 positif 1 négatif
ainsi 0010 (2) = 2 (10) 1010 (2) = -2 (10)
• Problème : l’addition binaire de ces 2 nombres ne donne pas le bon résultat (=1100(2) = - 4(10)) impose un traitement du signe et des circuits différents pour l’addition et la soustraction
• Solution: forme complémentée
Nombres négatifs
(binaire): complément à 1 et 2
• Le complément à 1: le nombre opposé est obtenu en inversant chaque bit du nombre (0 è 1 et vice versa)
ainsi 0010 (2) = 2 (10) 1101 (2) = -2 (10)
• Le complément à 2 : le complément à 1 auquel on ajoute 1
ainsi 0010 (2) = 2 (10)
1100 (2) = -2 (10) (= 1101 (2)+1)
• Note: le MSD donne encore le signe du nombre.
22
Nombres négatifs
(binaire): complément à 1 et 2
• Le complément à 1: le nombre opposé est obtenu en inversant chaque bit du nombre (0 è 1 et vice versa)
ainsi 0010 (2) = 2 (10) 1101 (2) = -2 (10)
• Le complément à 2 : le complément à 1 auquel on ajoute 1
ainsi 0010 (2) = 2 (10)
1110 (2) = -2 (10) (= 1101 (2)+1)
• Note: le MSD donne encore le signe du nombre.
Nombres négatifs
(binaire 4 bits: 16 valeurs)24
Décimal
+7 +2 +1 +0 -0 -1 -7 -8
Bit de signe
0111 0010 0001 0000 1000 1001 1111
Complément à 1
0111 0010 0001 0000 1111 1110 1000
Complément à 2
0111 0010 0001 0000 1111 1001 1000
• 0 unique en complément à 2 (bit en dépassement tronqué):
-0 è 1111(2) +1 = 10000(2)= 0000 (2)
L’exception du plus petit élément:
-8 est son propre
complément à 2
Nombres négatifs
(binaire)xkcd.com
Nombres négatifs
Exemple : 63 -‐ 28 = 35
26
00111111
+ 11100100
1 00100011
complément à 2
(bit en dépassement tronqué)
63 00111111 - 28 + 11100011 35 1 00100010
1 00100011
complément à 1
(bit en dépassement à rajouter à l’addition ! )
• Calculer le représentation binaire, puis hexadécimale de 13 et -5 avec
• la convention du complément à 2;
• l’utilisation de mots de 1 octet.
• Calculer alors par une addition binaire la somme des 2 nombres.
Nombres réels
• Virgule flottante : 12E8 = 12 x 10 8
• Représentation non unique - 12.34 = - 1234 x 10 -2
= - 0.001234 x 10 +4
= - 0.1234 x 10 +2
• Codage signe du nombre partie entière
partie décimale (la mantisse) signe de l’exposant
exposant
28
Nombres réels
• Représentation normalisée partie entière
• Décalage de l’exposant signe de l’exposant
• Norme IEEE 754 (simple précision)
• nombre= (bit de signe) 1.mantisse * 2 exposant-127
•
Exemple :
-2.5 = - 1.25 * 21 mantisse = .25(10) = 2-2 =.01(2)
31 30 23 22 0
-
128
(10).25
(10)signe exposant décalé mantisse
1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Représentation des caractères
• Systèmes électroniques avec autant d’états stables que de caractères : IMPOSSIBLE
• Systèmes à 2 états stables codage binaire
• 128 symboles suffisent : A-Z, a-z, 0-9, + symbole mise en forme 7bits
• Code ASCII (ici, représentation décimale du code) :
30
space 32 # 35 ? 63 car. return 13 ... ... ... ...
A 65 a 97 0 48
B 66 b 98 1 49
caractère code caractère code caractère code
Représentation des caractères
• Or le mot de base est l’octet è 128 symboles encore libres
• Création de jeux de caractères ou tables ascii étendues pour les codes > 127(10)
• En particulier: le jeu de caractères latins,
… … …
ç 251 ê 234 ÷ 247
à 195 µ 181 © 169
caractère code caractère code caractère code
Codage de l ’ information
Quelle est la signification de la suite d’octets suivante ?
4A 4F 55 52
32
Codage de l ’ information
Quelle est la signification de la suite d’octets suivante ?
4A 4F 55 52
• Une suite de 4 entiers positifs
• Une suite de 4 entiers relatifs (complément à 2)
• Une suite de 2 entiers de 16 bits
• Une chaine de caractère : «JOUR» en ASCII
• Une nombre à virgule flottante, nombre réel sur 32 bits
• Qui codent:
• Des données (texte, nombres)
• Des niveaux de gris dans une image
• Des amplitudes sonores
Codage de l ’ information
• Intérêt de connaître le codage de l’information (alors que le langage de programmation va nous fournir une abstraction):
• Debugger, trouver l’erreur
• Hacker/modifier des données ou un programme lui-même
• Exemples:
• Chercher et Modifier la valeur du compteur du nombre de vies dans la sauvegarde d’un jeu (mais c’est souvent crypté de nos jours)
• Modifier le code indiquant le codec vidéo utilisé dans un fichier AVI pour que celui-ci soit correctement reconnu par les lecteurs vidéos
• Corriger la fréquence d’un fichier mp3 incorrectement créé ou corrompu.
34
Le fourCC
• Un code de 4 caractères : 4 octets indiquant la méthode de compression utilisée pour la vidéo (Codec: compression- décompression) au début du fichier
• Entre autre:
• DX50, DIVX [44 49 56 58]: divx
• FMP4 [46 4D 50 34]:alternative au format divx créé par ffmpeg (codecs libre)
• H264
• SVQ3: H264 variante pour Quick Time by Sorenson
• Note: avi, mkv, mpg, mov sont des formats pour contenir la vidéo et indépendant du codec utilisé
• Contient le bitrate et la fréquence d’echantillonage
• Encodé avec un logiciel buggé
• Le fichier est à 41 KHz et 128 kbit/s
• Or l’entête du fichier indique 48KHZ et 128 bits/s