Académique Documents
Professionnel Documents
Culture Documents
INTEC-SUP
Niveau: Licence
2022/2023
Chapitre 2: Codage des nombres dans les machines
numerique
Plan
1. Représentation des nombres entiers positifs
2022/2023
1-1 Représentation dans une base b
Le chapitre précèdent définissait la décomposition d’un nombre entier dans une base quelconque: en informatique,
certaines bases sont privilégiées :
— la base 2 qui permet de représenter les nombres binaires, qui peuvent être stock ́es dans une machine;
— la base 16 qui permet de condenser l écriture en base 2 en donnant la valeur hexadécimale d’un octet seulement
en lieu et place de 8 bits ;
— la base 10, qui représentent les nombres décimaux pour nous les humains...
Il faut savoir passer d’une base `a l’autre sans difficulté...
1-2-Representation des nombres entiers positifs
En mathématiques, les nombres entiers comme les nombres réels, sont en nombre infini. En informatique un nombre
est représenté par une succession de bits qui ne peut dépasser la capacité limite des mémoires qui les stockent.
Comprenons déjà que si l’on veut manipuler des nombres entiers très grands dans un ordinateur, il faudra une
capacité de mémoire adaptée.
2022/2023
Representation sur n bits
➀ Avec n bits, combien d'états possibles peut-on coder ?
➁ Avec n bits, quels entiers positifs pouvons-nous représenter ?
Ainsi avec un octet, soit 8 bits, on peut coder les entiers allant de
0 = (00)16= (0000 0000)2 à 255 = (FF)16 = (1111 1111)2.
L’addition de nombres binaires répond au même algorithme utilise en base 10 ; il faut savoir prendre en compte la
retenue:
Example: Poser les opérations suivantes: (111) + (010) et (0101 0001) + (1011)
2022/2023
On appelle complément à 1 d’un nombre binaire, le nombre binaire obtenue en
changeant les 0 en 1 et les 1 en 0. Pour l’exemple, (1001) devient (0110)
2- Représentation binaire des entiers signés
2-1 Le Binaire signé: Le bit de poids le plus fort
représente le signe du nombre
Le bit le plus à gauche du mot binaire est celui qui va représenter le signe. Signe négatif
si ce bit vaut 1, signe positif quand ce bit vaut 0. Si on admet que le nombre peut
représenter des valeurs négatives, on parle de nombres "signés".
Observons d’abord le fait que les nombres codés en machine ont une dimension fixe :
Sur papier , les nombres ont des dimensions variables :
* L'addition de deux nombres de 2 chiffres donne un nombre de 2 ou 3 chiffres.
* La multiplication de deux nombres de 2 chiffres donne des nombres de 3 ou 4
chiffres.
En machine par contre, les nombres ne sont pas extensibles. Ils ont des dimensions
fixes. C'est exactement ce que nous avons avec certain compteurs.
2022/2023
2-2 Comment calculer les codes des nombres négatifs ?
Le calcul se fait en deux étapes:
1° Calcul du complément à 1 = Remplacer tous les 0 par des 1 et tous les 1 par des 0.
2° Calcul du complément à 2 = Ajouter 1 au complément à 1
Décimal −> binaire signé: Binaire signé−> Décimal :
1 − Codage du signe 1 − Détermination du signe: (1 0 1)
(−3)10 => bit de poids le plus fort égal à 1 => nombre négatif
2 − Codage en binaire naturel de la valeur absolue 2 − Isoler la valeur absolue,
substitution des 0 par des 1 et des 1 par des 0, ajout de 1 substitution des 0 par des 1 et des 1
Ainsi (3)10 = (11)2 , 11=>00; 00+1= 01, par des 0, ajout de 1. 01 =>10,
D’ou (−3)10 = (1 01)BS ajout de 1 => 11, soit −3
2-3 Changer le signe d’un nombre en complement à deux
• Pour changer le signe d'un nombre, on inverse chaque bit et on ajoute 1.
• Ceci correspond à calculer 2N – n, où n est le nombre dont on veux changer le signe et N est le nombre de bits pour
le représenter. 2022/2023
Complément à deux du nombre −81(10) sur un
octet. Vérification de −81(10) + 81(10) = 0(10) .
Il faut d’abord choisir le nombre de bits à utiliser pour représenter les deux nombres, en faisant l’extension du signe
correctement.
• L’addition se fait bit par bit. On laisse tomber toute retenue finale.
• Il ne peut pas y avoir de débordement si les deux nombres ont un signe différent.
• Un débordement peut se produire si les deux nombres ont le même signe. On le détecte en observant que la
somme a un signe différent.
• On garantit qu’un débordement n’aura pas lieu en ajoutant un bit aux opérandes avant de faire l’addition.
Erreur: OK.
+14 ne peut pas être +14 est représenté
représenté sur 4 bits. correctement sur 5 bits.
2022/2023
2-6 Soustraction de nombres binaires signés
Une approche simple consiste à procéder comme pour l’addition, mais on change le signe du nombre à soustraire en
inversant ses bits et en ajoutant 1.
• Un débordement peut avoir lieu. Les règles de détection sont similaires à celle de l’addition.
• On garantit qu’un débordement n’aura pas lieu en ajoutant un bit aux opérandes avant de faire la soustraction.
Lorsque les nombres à multiplier sont signés, le principe de l’opération devient plus complexe et fait appel à des
algorithmes non traités dans ce cours (cf. par exemple [Aum96]).
2022/2023
• Si le multiplicande est positif, pas de changement,
• Si le multiplicande est négatif, tous les produits partiels sont négatifs ou nuls. Il faut
étendre les produits partiels non nuls à 2n bits en rajoutant des 1 sur les bits de poids forts.
Exemple:
● Un nombre décimal est composé d'une partie entière et d'une partie fractionnaire après la
virgule.
● En base B, ce nombre X s'écrit : (X)B = an an-1 ...a0,b1 ...bm
Il se convertit en décimal en : (X)10 = anbn+...+a0b0,b1B-1+...+bmB-m .
2022/2023
Exemples:
2022/2023
La partie décimale est la concaténation des parties entières obtenues dans l'ordre de leur
calcul. Exemple: conversion de 28,8625 en binaire
– Conversion de 28: (11100)2 .
– Conversion de 0,8625:
● 0,8625 x 2 = 1,725 = 1 + 0,725
● 0,725 x 2 = 1,45 = 1 + 0,45
● 0,45 x 2 = 0,9 = 0 + 0,9
● 0,9 x 2 = 1,8 = 1 + 0,8
● 0,8 x 2 = 1,6 = 1 + 0,6
● 0,6 x 2 = 1,2 = 1 + 0,2
● 0,2 x 2 = 0,4 = 0 + 0,4
● 0,4 x 2 = 0,8 = 0 + 0,8
2022/2023
2-8-4 Code Gray ou code binaire réfléchi
Le nom du code vient de l'ingénieur américain Frank
Gray qui publia un brevet sur ce code en 1953, mais le code lui-même est plus ancien.
Le code de Gray, également appelé code Gray ou code binaire réfléchi, est un type
de codage binaire permettant de ne modifier qu'un seul bit à la fois quand un nombre
est augmenté d'une unité. Cette propriété est importante pour plusieurs applications.
Règle de formation du code Gray à partir du binaire pur
Le code de Gray est un codage binaire, c'est-à-dire une fonction qui associe à chaque
nombre une représentation binaire. Cette méthode est différente du codage binaire
naturel. Le tableau suivant montre partiellement le codage sur 4 bits (seules les 8 Code de Gray dans un codeur
premières valeurs sont présentées, les huit suivantes avec le premier bit à 1 n'y sont optique rotatif absolu à 13
pistes. Les treize pistes
pas). apparaissent sur tout le tour de
la couronne située au niveau
des deux vis cruciformes.
2022/2023
La différence principale entre
les deux est le fait que le
codage de Gray de deux
nombres consécutifs ne
diffère que d'une position. Par
exemple 5 est codé par 0111,
et 6 est codé par 0101: seul le
deuxième bit change.
Méthodes d'incrémentation
Il existe plusieurs méthodes pour incrémenter un nombre écrit selon le code de Gray (c'est-à-dire lui ajouter 1).
Inverser pour obtenir un nouveau nombre
Pour passer d'une ligne à la suivante, on inverse le bit le plus à droite possible conduisant à un nombre
nouveau. Cette méthode présente l'inconvénient de devoir connaître tous les codes de Gray qui précédent.
2022/2023
Selon la parité
Une autre méthode de calcul permettant de passer d'un nombre de Gray au suivant, et
qui présente l'avantage de ne pas nécessiter de connaître l'ensemble des nombres précédents est la suivante:
• si le nombre de 1 est pair, il faut inverser le dernier chiffre.
• si le nombre de 1 est impair, il faut inverser le chiffre situé à gauche du 1 le plus à droite.
Exemple d'incrément basé sur la parité
supplémentaire à droite et donc décaler les autres chiffres d'une position à gauche.
si le nombre de chiffres 1 est pair, le nombre est pair, il faut insérer un zéro à droite
si le nombre de chiffres 1 est impair, le nombre est impair, il faut insérer le chiffre 1 à droite.
2022/2023
Exemples
Exemple.
Effectuer les conversions suivantes:
a. (7852)10 en base hexadécimal puis en binaire.
b. (1101001011)2 en hexadécimal puis en décimal
c. (2EA)16 en binaire puis en décimal.
2022/2023
Correction.
1. Conversion en base hexadécimal
2022/2023
3-Representation des nombres réels dans un calculateur
Dans les calculateurs, deux représentations sont utilisées pour représenter les nombres fractionnaires: le codage en
virgule fixe et le codage en virgule flottante. On a tendance à utiliser les instructions et les données, ce qui constitue
l’information. Les données peuvent être de type caractère ou numérique. Pour les données numériques on peut voir
leur distinction d’après le schéma ci-dessous
En hardware, on peut facilement générer des nombres par
exemple:
En langage C, on écrit:
Unsigned short a; // unsigned 16 bit intege
En Verilog on écrit:
Reg[15:0] a; // unsigned 16 bit integer
2022/2023
3-1 Évolution des machines à calculer
2022/2023
Le clavier
Arithmomètre de Thomas
La première idée d'une machine dite à différence semble être dûe à J.H.
Müller, un constructeur de calculatrices arithmétiques. En effet, en 1786,
dans un document décrivant sa machine arithmétique, il mentionne être en
mesure de réaliser une machine mécanique permettant d'appliquer la méthode
des différences finies et ainsi de réaliser mécaniquement des tables
arithmétiques.
2022/2023
Les machines électromécaniques
La mécanographie Bell Labs Relays Computer
Caractérisée par l'utilisation des tubes à vide, cette C'est en 1947 que les physiciens
première génération débuta en 1948 avec la Bardeen, Brattain et Shockley,
finalisation du Manchester Mark 1. Jusqu'en 1951, inventèrent, aux laboratoires Bell,
les ordinateurs furent utilisés exclusivement par des le premier transistor à contact
militaires. En effet, c'est en 1951 que fut construit le ponctuel.
premier ordinateur commercial destiné à une
utilisation civile: l'UNIVAC 1.
2022/2023
Quatrième génération (1971-Aujourd'hui)
Dans un ordinateur, ou calculatrice, les nombres à virgule (réels) sont codés en virgule flottante. On parle de nombres
flottants (le type float de Python). La représentation binaire en machine d’un nombre flottant s’inspire de l’écriture
scientifique des nombres décimaux dont voici quelques rappels.
La norme IEEE 754 est la plus utilisée pour représenter les nombres flottants. Ils sont représentés sur 32 bits (format
appelé « simple précision » ou binary32) ou sur 64 bits (format appelé « double précision », ou binary64) sous la
forme : 𝑠.𝑚×2𝑛
où :
• 𝑠 est le signe du nombre, codé sur 1 bit (0 pour + et 1
pour −) ; et en format 64 bits (double précision) par un
• 𝑛 son exposant en puissance de 2, codé sur 8 bits (en mot binaire de la forme
format 32 bits) ou sur 11 bits (en format 64 bits) ;
• 𝑚 sa mantisse codée sur 23 bits (en format 32 bits) ou
sur 52 bits (en format 64 bits).
Ainsi, en machine, un flottant est représenté en format 32
bits (simple précision) par un mot binaire de la forme 2022/2023
Codage de la mantisse
Pour représenter les flottants, la base choisie est la base 2
Exemple:
(contrairement à l’écriture scientifique qui est la base 10) donc
Représentation machine du nombre 5,8125
On sait que 5,8125 est positif donc le bit de signe la mantisse est dans l’intervalle [1;2[. Il s’agit donc d’un
sera 0: nombre de la forme : 𝑚=1,𝑥𝑥…𝑥𝑥
Comme cette mantisse commence toujours par le chiffre 1, il a
Rappelons que 5,8125=(101,1101)2. Par analogie
avec l’écriture scientifique, on peut aussi écrire été choisi de ne pas coder ce « 1 » mais uniquement les chiffres
ce nombre binaire : 1,011101×22 en décalant la après la virgule.
virgule de deux rangs vers la gauche. En faisant Exemple (suite) Représentation machine du nombre
cela, on a fait apparaître : 5,8125
• la mantisse : 𝑚=1,011101 La mantisse de ce nombre est 𝑚=1,011101. Comme le « 1
• l’exposant : 2 » à gauche de la virgule n’est pas codé, la mantisse sera
Il reste maintenant à voir comment sont codés la codée par 01110100…0 en ajoutant autant de zéros que
mantisse et l’exposant. nécessaires pour arriver à 23 bits (simple précision) ou 52
bits (double précision) :
2022/2023
Exemple (suite) Représentation
machine du nombre 5,8125
Codage de l’exposant
Rappelons que
L’exposant est codé sur 8 bits ou 11 bits selon le format utilisé.
Sur 8 bits on peut coder 256 valeurs : les entiers compris entre 5,8125=(101,1101)2=(1,011101×22)2 donc
−127 et 128. Sur 11 bits on peut coder 2048 valeurs : les l’exposant est 2. La norme IEEE 754 ne
entiers compris entre −1023 et 1024.
L’exposant est un entier relatif mais la norme IEEE 754 prévoit pas de coder +2 en complément à deux
n’utilise pas l’encodage par complément à 2 des entiers mais d’ajouter 127 en format simple précision
relatifs. Elle prévoit un décalage qui dépend de l’encodage
utilisé : (1023 en format double précision): on obtient
• Dans le format simple précision (32 bits), le décalage est alors 2+127=129. Il ne reste plus qu’à coder
127, c’est-à-dire qu’il faut ajouter 127 à l’exposant.
• Dans le format double précision (64 bits), le décalage est de l’entier 129 en binaire: (10000001)2. On ajoute
1023. L’objectif est d’obtenir un nombre positif pour coder éventuellement des zéros (à gauche !) pour
l’exposant. En effet, dans le format simple précision, en
procédant à ce décalage de 127, on obtient des valeurs compléter les 8 bits réservés à l’exposant.
positives : 2022/2023 Dans le format simple précision (sur 32 bits),
on obtient finalement:
Dans le format double précision (sur 64 bits), on ajouterait 1023 à la puissance pour
obtenir 1025 (2+1023) dont l’écriture binaire est (10000000001)2. On obtiendrait:
2022/2023
Bilan : En format simple précision, le nombre réel 5,8125 est représenté sur 32 bits en machine par le mot :
0 10000001 01110100000000000000000
En format double précision, il est représenté sur 64 bits en machine par le mot :
0 10000000001 0111010000000000000000000000000000000000000000000000
3-3 Une représentation approximative
Codage approché de certains réels
Tous les nombres réels dont l’écriture en base est infinie ne peuvent être représentés de manière exacte en machine. Par exemple,
on a vu que le nombre décimal 1,2 a une écriture binaire infinie : 1,2=(1,001100110011…)2=+1,001100110011…×20
La mantisse de ce nombre est 𝑚=1,001100110011… donc elle est infinie. Or, il n’y a que 23 ou 52 bits réservés pour coder la
mantisse. L’ordinateur doit donc tronquer la mantisse à 23 ou 52 bits. Cela signifie qu’en format simple précision, la mantisse du
nombre 1,2 est codée par le mot binaire de 23 bits les autres bits ne pouvant pas être codés.
Seule une valeur tronquée de la mantisse peut être codée et donc la représentation en
machine du nombre réel 1,2 n’est qu’une approximation du réel 1,2.
Autrement dit, le nombre flottant 1.2 n’est qu’une valeur approchée du nombre réel 𝟏,𝟐.
Cet exemple n’en est qu’un parmi tant d’autres : il y a une infinité de nombres réels qu’il est impossible de
représenter de manière exacte en machine.
Impossibilité de coder tous les nombres réels
Voici l’écriture binaire en format double précision de deux flottants.
On comprend aisément qu’il n’y a pas de flottant entre 1.5 et 1.5000000000000002. Le flottant
1.5000000000000001 est donc représenté comme 1.5.
La précision possible avec une mantisse sur 52 bits se situe au niveau dernier bit qui vaut 2−52 soit environ 2×10−16.
L’écart entre 1.5 et 1.5000000000000002 étant égal à 2×10−16, on ne peut pas trouver un flottant compris entre les
deux.
2022/2023
A retenir
Les nombres flottants sont une représentation approximative des nombres réels dans
un ordinateur. En particulier, il n’est pas possible de représenter de manière exacte en
machine tous les nombres réels. La manipulation de nombres réels par un langage
informatique est donc à prendre avec précaution car elle peut engendrer des résultats
surprenants, en particulier il ne faut jamais tester l’égalité entre deux flottants.
2022/2023
Je vous remercie de votre très
aimable attention
2022/2023