04 - Binaire Cours Hexadecimal Representation Donnees
04 - Binaire Cours Hexadecimal Representation Donnees
04 - Binaire Cours Hexadecimal Representation Donnees
1 Un peu d’histoire
Voir le site : https ://www.math93.com/histoire-des-maths/histoire-des-nombres/154-histoire-des-nombres.html
Remarque historique
L’invention de cette numération dans l’Inde au 5e siècle.
Les chiffres de "un" à "neuf" ont été inventés en Inde avant notre ère. Ils apparaissent dans des ins-
criptions de Nana Ghât au 3e siècle av.J.-C. , mais le principe de position n’y est pas appliqué.
La numération de position avec un zéro (qui était un point à l’origine), a été inventé au cours du
5e siècle. Dans un traité de cosmologie écrit en sanscrit en 458, le "LOKAVIBHAGA", "les parties de
l’univers", on voit apparaître le nombre 14 236 713 écrit en toute lettres ( "un" "quatre" ...). dans ce
texte, on trouve aussi le mot "sunya", "le vide", qui représente le zéro. C’est à ce jour le document le
plus ancien faisant référence de cette numération.
Maintes fois traduit en latin à partir du 12e siècle, sa célébrité fût telle que ce calcul fut nommé
algorisme, d’Algorismus latinisation d’al-Khuwârizmi.
Au Xe siècle, le moine français Gerbert d’AURILLAC apprit la nouvelle numération chez les Maures
d’Espagne et, grâce aux chaires qu’il occupa dans les établissement religieux d’Europe, il put intro-
duire le nouveau système en occident.
— Pour les bases supérieures à 10, il faut d’autres chiffres. On aurait pu inventer des symboles nouveaux.
On convient plutôt d’utiliser les premières lettres de l’alphabet.
Pour la base 16, on utilise les chiffres de 0 à 9 puis A (pour 10), B (pour 11), C (pour 12) ... , F (pour 15)
Exemple
— BASE 2 :
10112 = 1 × 23 + 0 × 22 + 1 × 21 + 1 × 20
— BASE 10
204810 = 2 × 103 + 0 × 102 + 4 × 101 + 8 × 100
— BASE 16
204C 16 = 2 × 163 + 0 × 162 + 4 × 161 + 12 × 160
# CODE PYTHON
>>> bin(45) # la fonction bin permet de convertir un décimal en base 2
'0b101101'
# Remarquez l'utilisation des guillemets pour le résultat,
# il est de type chaîne de caractères
>>> hex(45) # la fonction hex permet de convertir un décimal en base 16
'0x2d'
2.3 Le binaire
2.3.1 Vocabulaire
Tout information manipulée par un ordinateur est représentée par des mots composés uniquement de 0 et
1 (les bits). Un octet (byte) est un mot binaire de 8 bits et un quartet = un mot binaire de 4 octets ou 32 bits.
En binaire chaque rang ne peut prendre que deux valeurs (il pouvait en prendre dix en décimal). Donc, dès
que le rang atteint sa deuxième - la plus haute - valeur on change de rang. En binaire, un rang commence à
0 et se termine à 1.
base 10 0 1 2 3 4 5 6 7 8 9 10 11 12
base 2 02 12 102 112 1002 1012 1102 1112 10002 10012 10102 10112 11002
Exemple
Écrivons 77 en base 2. Il s’agit de faire une suite de divisions euclidiennes par 2. Le résultat sera
la juxtaposition des restes. Le schéma ci-dessous explique la méthode :
7710 = 10011012
10112 = 1 × 23 + 0 × 22 + 1 × 21 + 1 × 20 = 1110
2.3.4 Exercices
Exercice 2.2
Trouver la représentation en base 10 du nombre 1111 11112 .
Corrigé
— Méthode 1.
— Méthode 2 : On peut aussi plus simplement considérer que c’est l’entier qui précède
Exercice 2.3
En base 10, une série de 2 caractères peuvent représenter 100 nombres entiers différents (de 0 à 99).
Sur le même principe combien de nombres entiers naturels peut on représenter avec un nombre n de
caractères en binaire.
Corrigé
Avec un nombre n de caractères en binaire ou un mot de n bits, on peut représenter les
nombres entiers de 0 à 2n − 1 soit 2n entiers.
n = (h p ...h 0 )16
avec,
h i ∈ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,C , D, E , F }
Le tableau suivant présente les conversions des premiers entiers naturels entre les trois représentations
précédentes.
Là encore, convertir un entier du système hexadécimal au système décimal et réciproquement peut aisé-
ment se faire.
(B 7)16 ↔ 11 × 161 + 7 × 160 = 183
On procède par divisions successives par 16 pour convertir en entier base 10 en base 16.
Par exemple ici :
La conversion hexadécimal ↔ binaire peut également se faire rapidement : chaque chiffre hexadécimal
équivaut à exactement quatre chiffres binaires.
— Reprenant l’exemple du nombre B7, le tableau précédent indique que 7 peut être converti en 0111 et
B en 1011. Ce qui donne la représentation binaire 01111011 ou 1111011 si on omet le premier zéro.
{
(7)16 = 710 = (0111)2
=⇒ (B 7)16 = (1011 0111)2
(B )16 = 1110 = (1011)2
— À la représentation binaire 110 1110 peut être associée deux blocs de quatre chiffres : 0110 (on ajoute
1 zéro) et 1110. Le premier bloc se convertit en 6 et le second en E de sorte que la représentation
hexadécimale de l’entier est 6E.
{
(0110)2 = (6)16
=⇒ (0110 1110)2 = (6E )16
(1110)2 = (E )16
Particulièrement pratique pour représenter de grands entiers sous forme compacte, la représentation
hexadécimale est fréquemment utilisée en électronique numérique et dans le monde des réseaux
pour décrire des adresses.
Exercice 2.4
Donner la représentation binaire de (ABC 1)16 et la représentation en hexadécimale de (1011 0110 1101)2
Corrigé
— (ABC 1)16 = (1010 1010 1100 0001)2
— (1011 0110 1101)2 = (B 6D)16
D’un point de vue matériel, un ordinateur est un ensemble de composants électroniques parcourus par des
courants électriques. Par convention, le passage d’un courant dans un composant est codé par le chiffre
1, l’absence de courant étant codé par un 0. Ainsi, toute information stockée dans un ordinateur peut être
codée par une suite finie de 0 et de 1 appelée suite de bits (binary digits). Une convention fixe la taille de ces
suites finies de bits.
Par exemple, un codage sur 4 bits signifie qu’une information est représentée en machine à l’aide de quatre
0 ou 1. L’ordre de ces bits importe de sorte que 0111 ne code pas la même information que 1110. En outre,
les zéros présents en début de codage sont indispensables. Ainsi, sur 4 bits, 24 = 16 entiers naturels peuvent
être codés ; par exemple, les entiers de 0 à 15.
0 ↔ 0000 ; 1 ↔ 0001 ; 2 ↔ 0010 ; 3 ↔ 0011 ; 4 ↔ 0100 ; 5 ↔ 0101 ; 6 ↔ 0110 ; 7 ↔ 0111 ; 8 ↔ 1000 ; 9 ↔ 1001
Cela signifie que les entiers plus grands que 2n ne peuvent pas être codés sur n bits. La capacité de codage
sur n bits est dépassée. Soit on ajoute des bits pour coder de plus grands entiers, soit on se contente de
coder les entiers sur n bits. Alors attention aux additions ...
Exemple
Illustrons notre propos avec n = 4 bits et deux entiers n 1 = 3 et n 2 = 4. L’addition de ces entiers
est l’entier n 3 = 7. En binaire, les additions sont effectuées suivant les règles suivantes.
— 0 + 0 donne 0 avec une retenue égale à 0 ;
— 0 + 1 donne 1 avec une retenue égale à 0 ;
— 1 + 0 donne 1 avec une retenue égale à 0 ;
— 1 + 1 donne 0 avec une retenue égale à 1 ;
Le codage de n 1 et n 2 sur 4 bits donne respectivement 0011 et 0100. L’addition de ces codages
peut être posée et s’écrit :
Retenue 0 0 0 0
0 0 1 1
+ 0 1 0 0
0 0 1 1 1
Choisissons à présent n 1 = 11 et n 2 = 13 dont les codages binaires sur 4 bits sont respectivement
1011 et 1101. L’addition de ces codages donne alors :
Retenue 1 1 1 1
1 0 1 1
+ 1 1 0 1
1 1 0 0 0
Le résultat obtenu est 11000. En codant sur 4 bits, seuls les 4 bits de plus faibles poids sont
conservés, à savoir 1000. Ce codage est celui de l’entier 8 et non celui de la somme 11 + 23 = 24.
On peut remarquer 8 = 24 − 16 ; le résultat est la somme modulo 16 (c’est à dire à une nombre
de fois 16 près).
2.5.3 Overflow
Remarque historique
Le vol inaugural 501 du lanceur européen Ariane 5 du 4 juin 1996 s’est soldé par un échec, causé
par un dysfonctionnement informatique, qui vit la fusée se briser et exploser en vol seulement 36,7
secondes après le décollage.
Tout tenait à une seule petite variable : celle allouée à l’accélération horizontale. En effet, l’accélé-
ration horizontale maximum produite par Ariane 4 donnait une valeur décimale d’environ 64. La
valeur d’accélération horizontale de la fusée étant traitée dans un registre mémoire à 8 bits, cela
donne en base binaire 28 = 256 valeurs disponibles, un nombre suffisant pour coder la valeur 64, qui
donne en binaire (100 0000)2 et ne nécessite que 7 bits.
Mais Ariane 5 était bien plus puissante et brutale : son accélération pouvait atteindre la valeur 300,
qui donne (100101100)2 en binaire et nécessite un registre à 9 bits.
Ainsi, la variable codée sur 8 bits a connu un dépassement de capacité. Il aurait fallu la coder sur
un bit de plus, donc 9 bits, ce qui aurait permis de stocker une valeur limite de 29 − 1 = 511, alors
suffisante pour coder la valeur 300. De ce dépassement de capacité a résulté une valeur absurde dans
la variable, ne correspondant pas à la réalité. Par effet domino, le logiciel décida de l’autodestruction
de la fusée à partir de cette donnée erronée.
Méthode : complément à 2
On considère un nombre relatif n en base 10.
1. Si n ≥ 0, on utilise la méthode classique de conversion en base 2 (cf. 2.3.2).
2. Si n est négatif, on code |n| en binaire puis :
— Étape 1 : On prend le complément à 1 (NON logique) de l’écriture binaire, c’est
à dire qu’on remplace les 1 par des 0 et les 0 par des 1.
— Étape 2 : On ajoute 1 au résultat, plus exactement (0000 0001)2 si on est sur 8
bits.
— On remarque que l’écriture binaire de l’entier négatif n correspond à celle n +
2N .
Exemple
Représentation binaire de (−8)10 sur 8 bits.
— Étape 1 : On prend le non logique ou complément à 1.
Par exemple (sur 8 bits) :
— Donc
(8)10 = (0000 1000)2 =⇒ (−8)10 = (1111 1000)2
Par complément à 2
3.3 Astuce
Astuce
Il suffit en fait en lisant le nombre binaire de droite à gauche :
— Étape 1 : de conserver tous les 0 et le premier 1 ;
— Étape 2 : de changer tous les autres digits à gauche du premier 1.
Une petite vidéo : https ://www.youtube.com/watch ?v=bNTyHfTnqEU
Juste une petite confusion entre droite et gauche mais cela ne gène pas la compréhension.
Définition 1
On a vu dans le TD d’approche que sur 4 bits on a les résultats suivants. Notez que le bit de poids fort donne
bien le signe :
−8 −7 −6 −5 −4 −3 −2 −1 0 1 2 3 4 5 6 7
1 000 1 001 1 010 1 011 1 100 1 101 1 110 1 111 0000 0001 0010 0011 0100 0101 0110 0111
3. La moitié soit 2n−1 sont des entiers strictement négatifs : de −2n−1 à (−1).
−23 = −8 −→ · · · −→ · · · −→ 23 − 1 = 7
— Sur 32 bits : on a 232 = 4 294 967 296 relatifs possibles de −2 147 483 648 à 2 147 483 647 :
Définition 2
a
Un nombre décimal est un nombre qui peut s’écrire sous la forme , où a est un entier relatifs
10n
et n un entier.
Par exemple :
1235
= 12, 35 = 1 × 101 + 2 × 100 + 3 10−1} + 5
| ×{z 10−2}
| ×{z
102
3 dixièmes 5 centièmes
Définition 3
a
Un nombre dyadique est un nombre qui peut s’écrire sous la forme , où a est un entier relatifs
2n
et n un entier.
Par exemple :
13 13
= 3, 25 = 2 = 1 × 21 + 1 × 20 + 0 × 2−1 + 1 × 2−2
4 2
Méthode
a
Pour obtenir le développement dyadique d’un nombre dyadique on prend le binaire
2n
correspondant à a et on insère une virgule avant le n-ième bit en partant de la fin.
13
Par exemple : pour
22
— Étape 1 : a = 13 = (1101)2 ;
13
— Étape 2 : Le développement dyadique de est donc (11, 01)2
22
13 13
= 3, 25 = (11, 01)2 ⇐⇒ 3, 25 = 2 = 1 × 21 + 1 × 20 + 0 × 2−1 + 1 × 2−2
22 2
13 13 = (1101)2
13 13
= 1, 3 = (110, 1)2
10 2
13 13
= 0, 13 = (11, 01)2
102 22
13 13
= 0, 013 = (1, 101)2
103 23
Méthode
Pour obtenir le développement dyadique d’un nombre décimal quelconque .
— Étape 1 : on convertit sa partie entière en base 2 ;
— Étape 2 : on multiplie la partie fractionnaire par 2 puis on note sa partie entière .
— Étape 3 : on recommence cette opération avec la partie fractionnaire du résultat et
ainsi de suite
— Test d’arrêt : On s’arrête quand la partie fractionnaire est nulle ou quand la préci-
sion souhaitée est atteinte.
— Conclusion : la partie fractionnaire dans la base 2 est alors la concaténation des
parties entières obtenues dans l’ordre de leur calcul.
Par exemple : pour 3, 25
• 3 = (11)2
• 0, 25 × 2 = 0, 5 = 0 + 0, 5
• 0, 5 × 2 = 1 = 1 + 0
On retrouve bien :
3, 25 = (11, 01)2
Exemple
Conversion de 12,6875 en binaire
La partie entière : 12 = (1100)2
Exemple
1
Conversion de en binaire
3
1
On pose x = ≈ 0, 33333 · · · , la partie entière : 0 = (0)2 et :
3
1
= (0, 0101010101 · · · · · ·)2
3
L’utilisation de la virgule flottante est la plus répandue. Son principe consiste à séparer les chiffres signifi-
catifs et la position de la virgule dans le but d’avoir un maximum de chiffres significatifs.
Ce type de représentation est implémentées directement dans le micro-processeur.
On distingue trois parties :
— le signe s ,
— la mantisse m ,
— l’exposant e ,
Exemple
La norme IEEE-754 utilisée depuis 1995 et révisée en 2008 est la plus utilisée pour représenter les nombres
à virgule flottante en base 2 sur les ordinateurs.
Elle propose deux formats (nombres de bits pour représenter les nombres) : simple précision (32 bits) et
double précision (64 bits). Le premier bit de la mantisse étant toujours 1, on ne le représente pas (le cas 0 se
traite à part). Sans entrer dans les détails on a :
— Simple précision : 32 bits
— le signe s : 1 bit de signe (0 pour positif et 1 négatif)
— l’exposant e : 8 bits pour l’exposant (décalé de 127).
— la mantisse m : 23 bits pour la mantisse.
— Les flottants positifs en simple précision peuvent représenter des nombres décimaux compris
(approximativement) entre 10−38 et 1038 .
— Double précision : 64 bits
— le signe s : 1 bit de signe (0 pour positif et 1 négatif)
— l’exposant e : 11 bits pour l’exposant (décalé de 1023).
— la mantisse m : 52 bits pour la mantisse.
— Les flottants positifs en double précision peuvent représenter des nombres décimaux compris
(approximativement) entre 10−308 et 10308 .
Exemple
Par exemple le mot de 32 bits suivant :
1 10000110 10101101100000000000000
e 10 = 27 + 23 + 22 − 127 = 7
Remarque historique
Historiquement l’ASCII (American Standart Code for Information Interchange) a été définie pour
écrire des textes en anglais. Il n’y a donc pas de lettre accentuées
Exercice 5.5
1. A l’aide de la table ASCII, coder la phrase suivante "L’an qui vient !"
2. Retrouver l’expression codée en binaire :
0100 0010 0111 0010 0110 0001 0111 0110 0110 1111 0010 1100
3. Peut on coder la phrase "Un âne est passé par là ?" à l’aide de la table ASCII.
Malgré un nombre de caractères doublé, cela reste insuffisant pour représenter tous les caractères, on dé-
finit alors plusieurs tables de correspondances (on parle aussi de pages) notées I SO − 8859 − n, où n est le
numéro de la table. Bien d’indépendantes, ces tables sont conçues pour qu’elles soient compatibles entre
elles. Les 128 premiers caractères sont ceux de la norme ASCII et les autres sont spécifiques.
Par exemple le code ISO 8859-1 (latin-1) correspond à la zone Europe occidentale
Cette norme associe à chaque caractère (lettre, nombre, idéogramme, etc.) un nom unique (en anglais et en
français) ainsi qu’un numéro (entier positif en base 10 appelé point de code).
Cette norme Unicode : ISO-10646 a une capacité maximale de 232 caractères soit plus de 4 milliards (puisque
l’on code sur 4 octets, 32 bits au maximum).
On utilise la notation U+xxx pour désigner les points de code du jeu universel de caractères.
La norme unicode définit plusieurs techniques d’encodage pour représenter les points de code. Ces enco-
dages, appelés formats de transformation universelle ou Universal Transformation Format (UTF) portent
les noms UTF-n, où n désigne le nombre minimal de bits pour représenter un point de code.
Bilan encodage
— ASCII : table sur 7 bits codant 128 caractères.
— Norme Unicode : ISO-10646 a une capacité maximale de 232 caractères soit plus
de 4 milliards.
— Le format UTF-8 est le format d’encodage le plus utilisé. Il permet un encodage
sur 1 à 4 octets au maximum