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 -

Bit de signe

1 bit indique le signe, le reste = le nombre en valeur absolue

exemples sur 8 bits :

inconvénients :

10000101+00000011=10001000=−81\ 000\ 0101 + 0\ 000\ 0011 = 1\ 000\ 1000 = -8

Complément à deux

Complément à deux : exemples

Complément à deux : zéro et addition

avantage : l’addition fonctionne correctement

−5+8=11111011+00001000=00000011=3-5 + 8 = 1111\ 1011 + 0000\ 1000 = 0000\ 0011 = 3

(la retenue qui sort à gauche est ignorée)

Complément à deux : décodage et plage

Lire un nombre en complément à deux :

exemple pour 111110111111\ 1011 :

  1. on retire 1 : 111110101111\ 1010
  2. complément à 1 : 00000101=50000\ 0101 = 5
  3. donc 11111011=−51111\ 1011 = -5

Sur nn bits, on représente les entiers de −2n−1-2^{n-1} à 2n−1−12^{n-1}-1 :

Complément à deux : exos conversion

Exercice

Écrire les nombres suivants en complément à deux sur 8 bits

  • −14-14
  • −55-55
  • −20-20
Exercice

Convertir les nombres suivants (écrits en complément à deux) en décimal

  • 110110111101\ 1011
  • 101101101011\ 0110
  • 000100110001\ 0011

Complément à deux : exos opérations

Exercice

Faire les opérations suivantes en décimal puis en binaire complément à deux; vérifier le résultat

  • −8+−5-8 + -5
  • −12+15-12 + 15
  • −8+9-8 + 9
  • 9+−129 + -12

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 code les montants en centimes, ou en décicentimes, ou en centicentimes

Exercices

Exercice

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’à 1010 milliards d’euros

Conversion décimal à virgule - binaire à virgule

Principe

Conversion en binaire à virgule :

Exemple : conversion de 28,8625 en binaire

==> 11100,11011100...211100,11011100..._2

Exercices

Exercice

Représenter en binaire à virgule les nombres suivants :

  • 0,10,1
  • 0,250,25
  • 1/31/3
Exercice

Convertir, puis calculer en binaire : 0,1+0,20,1 + 0,2

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

l’exposant peut être positif ou négatif; on pourrait le représenter en complément à deux, mais ce n’est pas pratique pour les comparaisons => on décale sa valeur de 2e−1−12^{e-1}-1

Flottant 32 bits (float32)

==> on décale l’exposant de 28−1−1=1272^{8-1}-1=127

Valeur du nombre

v=s×2e−127×1,m2v = s \times 2^{e-127} \times 1{,}m_2

Exemple : −118,625-118,625 en float32

Résultat : −118,62510=110000101110110101000000000000002=C2ED400016-118,625_{10} = 1100\ 0010\ 1110\ 1101\ 0100\ 0000\ 0000\ 0000_2 = C2ED4000_{16}

Exercices

Exercice

Écrire 452,778452,778 en float32.

Exercice

Combien vaut 010000110101111010000000000000000\ 10000110\ 10111101000000000000000 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