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

avantage : l’addition fonctionne correctement

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

Complement à 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

– Conversion de 28 : 11100211100_2 – Conversion de 0,8625 :

==> 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 c pas facile pour les comparaisons => on décale de 2e112^{e-1}-1 sa valeur

Flottant 32 bits (float32)

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

Valeur du nombre

v=s×2e1272×(m+1)v = s \times 2^{e-127_2} \times (m + 1)

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

Ecrire 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