Représentation des nombres entiers
Nombres positifs
Principe
Représentation d’un nombre entier positif ou nul : binaire de base
Nombres négatifs
Problème
comment représenter le signe -
- avec uniquements des bits
- dans un nombre de bits fixé
Bit de signe
1 bit indique le signe, le reste = le nombre en valeur absolue
exemples sur 8 bits :
inconvénients :
- comment représenter zéro ? et
- l’addition marche plus :
Complément à deux
change rien pour les nombres positifs
on obtient les nombres négatifs en
- inversant tous les bits de la valeur absolue (= complément à 1)
- on ajoute 1 au résultat (sans s’occuper des dépassements)
Complément à deux : exemples
pour coder -5 sur 8 bits
coder -3 sur 16 bits
vérification dans RISC simulator
1111 1111 1111 1101pour coder -0
avantage : l’addition fonctionne correctement
Complement à deux : exos conversion
Écrire les nombres suivants en complément à deux sur 8 bits
Convertir les nombres suivants (écrits en complément à deux) en décimal
Complément à deux : exos opérations
Faire les opérations suivantes en décimal puis en binaire complément à deux; vérifier le résultat
Représentation des nombres décimaux
Représentation en virgule fixe
Principe
lorsque le nombre de chiffres en base 10 après la virgule est fixé, on peut simplement décaler tous les nombres d’un facteur donné
exemple opérations financières en 64 bits :
- on ne se préoccupe pas des millièmes de centimes
- on a rarement à traiter des opérations dépassant plusieurs milliers de milliards d’euros ()
=> on code les montants en centimes, ou en décicentimes, ou en centicentimes
Exercices
Sur 32 bits, en complément à deux, peut-on représenter en virgule fixe les montants d’une grosse société, sachant que
- on veut une précision au millième de centimes
- on veut pouvoir manipuler des montants jusqu’à milliards d’euros
Conversion décimal à virgule - binaire à virgule
Principe
Conversion en binaire à virgule :
- on fait des divisions successives pour la partie entière
- on fait des multiplications successives par 2 pour la partie à virgule
Exemple : conversion de 28,8625 en binaire
– Conversion de 28 : – Conversion de 0,8625 :
==>
Exercices
Représenter en binaire à virgule les nombres suivants :
Convertir, puis calculer en binaire :
Représentation en virgule flottante
Principe
pour les calculs scientifiques (la mole :) on peut avoir besoin de nombres très grands ou très petits => notation scientifique
pour représenter un nombre en notation scientifique dans un nombre fixé de bits, on utilise une représentation normalisée (IEEE 754)
en gros
- 1er bit = le signe
- e bits suivants = l’exposant
- le reste des bits = la mantisse
l’exposant peut être positif ou négatif; on pourrait le représenter en complément à deux, mais c pas facile pour les comparaisons => on décale de sa valeur
Flottant 32 bits (float32)
- 1 bit de signe (1 pour négatif)
- 8 bits pour l’exposant
- 23 bits pour la mantisse (la partie après la virgule)
==> on décale l’exposant de
- exposant 3 = exposant 130
- exposant 0 = exposant 127
- exposant 10 = exposant 137
Valeur du nombre
- s = 1 ou -1 selon le bit de signe
- e est l’exposant
- m est la mantisse
Exemple : en float32
le signe (1er bit) : nombre négatif, le premier bit est
écriture du nombre (sans le signe) en binaire :
décalage de la virgule vers la gauche, de façon à ne laisser qu’un 1 sur sa gauche : . C’est un nombre flottant normalisé : la mantisse est la partie à droite de la virgule, remplie de 0 vers la droite pour obtenir 23 bits. Cela donne (on omet le 1 avant la virgule, qui est implicite).
l’exposant est égal à , il faut le décaler et le convertir. Pour le format 32-bit IEEE 754, le décalage est . Donc et .
Résultat :
Exercices
Ecrire en float32.
Combien vaut en décimal ?
Aide : vérification et entraînement sur
https://www.h-schmidt.net/FloatConverter/IEEE754.html
Conséquences
Les valeurs stockées en virgule flottante ne sont pas exactes, idem pour les calculs
- on ne teste pas l’égalité de deux flottants
- on fait attention aux erreurs qui s’accumulent dans les calculs