Académique Documents
Professionnel Documents
Culture Documents
Dans cette notation, les nombres positifs utilisent le même procédé de représentation que la
notation binaire de la section précédente.
Pour obtenir le codage binaire d'un nombre négatif on procède en commençant par fixer la
taille de l'espace de codage en nombre de bits : par exemple 8, 16 ou 32 bits. Prenons 8 bits
dans le cas présent. Ensuite :
1. on prend la valeur absolue du nombre que l'on code sur 8 bits
2. on complémente chacun des bits (i.e. on remplace les 0 par des 1 et inversement)
3. on ajoute 1 au résultat final
Par exemple, pour représenter (-8)10 :
| -8 | = 8 = 0 0 0 0 1 0 0 0
Complément à 1
11110111
(changement de bits)
Complément à 2 (+1) 1 1 1 1 1 0 0 0
Ainsi le nombre négatif (- 8) est codé sur 8 bits par le nombre binaire 11111000
-1 = 1 1 1 1 1 1 1 1
Soit (-8)10 = 111110002
-2 = 1 1 1 1 1 1 1 0
Autres représentations sur 8 bits : -127 = 1 0 0 0 0 0 0 1
-128 = 1 0 0 0 0 0 0 0
On remarque que tous les nombres négatifs ont leur bit de poids fort à 1, alors que les
nombres positifs ont leur bit de poids fort à 0.
Dans la notation binaire en complément à 2 sur n bits, on peut coder les nombres entre :
-(2n-1) à +(2n-1 - 1)
Finalement, on obtient :
La représentation IEEE 754 peut poser des problèmes de représentation pour certains nombres
après réalisation de calculs. Soit le programme suivant :
v1=1.2
v2=1.3
v3=1.3001
w1=v1-v2
w2=v2-v3
print("w1 = ",w1)
print("w2 = ",w2)
Le résultat en sortie est :
w1 = -0.10000000000000009 (au lieu de 0.1)
w2 = -9.999999999998899e-05 (au lieu de 0.0001)
En outre, pour comparer deux nombres flottants, on n’utilisera pas l'opérateur d'égalité (=)
mais on vérifiera que la valeur absolue de leur différence est inférieure ou égale à un ε donné:
en langage C, une chaîne est une suite consécutive d'octets (au format ASCII)
terminée par le caractère '\0',
en Pascal, une chaîne a une longueur maximum de 255 caractères, car le premier octet
de la chaîne code pour la longueur.
Les caractères 0 à 31 sont des caractères non imprimables et correspondent à des codes de
contrôle :
8 = BS = backspace
13 = CR = Carriage Return
10 = LF = Line Feed
27 = ESC = escape
Remarque : sous Windows, la fin de ligne est représentée par CR suivi de LF, alors que sous
Linux seul LF est utilisé. C'est pourquoi lorsque l'on ouvre sous Linux un fichier texte édité
sous Windows on voit apparaître des caractères '^M' qui correspondent à CR.
Remarque 1 : la valeur 015 est interprétée en octal car elle commence par le chiffre 0
et vaut donc 13 en décimal.
Remarque 2 : la commande tr -d supprime toute occurrence de CR dans le fichier
passé en entrée et stocke le fichier résultat dans tmp.txt. Taper man tr sous Unix pour
connaître les autres fonctionnalités de tr
Remarque 3 : on peut également installer les utilitaires dos2unix et unix2dos du
package tofrodos sous Ubuntu par exemple.
Le standard Unicode est un mécanisme universel de codage de caractères. Les 256 caractères
du code ASCII ne sont malheureusement pas suffisants pour coder des langues comme
l'arabe, l'hindi, le chinois, le japonais, ... La version 4.1.0 d'Unicode de 2005 permet de coder
245.000 caractères. Les caractères Unicode utilisent 16 ou 32 bits pour stockage.
Remarque : En Java les chaînes de caractères sont codées en utilisant le format UNICODE.
Compétences à acquérir
il faut être capable de :
M1 = 11 M2 = 23 M3 = 127
M4 = 160 M5 = 511 M6 = 1024
K1 = – 11 K2 = – 23 K3 = – 160 K4 = – 123
Exercice 4 : convertir les nombres réels suivants en notation IEEE 754 sur 32 bits :
Exercices de programmation
Exercice 6 : écrire un programme en langage C qui prend en paramètre un nombre réel et
donne sa représentation binaire au format IEEE 754.