Binaire : travail sur les réels

Sommaire du document

Nous avons vu (dans la partie "codes binaires") comment représenter des nombres entiers positifs en binaire.
Mais les nombres ne se limitent pas à cette catégorie, et comment pouvons nous coder des nombres négatifs ou des fractions en binaire, alors que nous n'avons à notre disposition que deux états (0 et 1) ?

Les différentes solutions appliquées dans le monde informatique utilisent une partie des bits pour coder les informations relatives au nombre utilisé.
Il est dès lors très important que la série de bits soit interprétée convenablement (que les règles soient identiques), sinon une série de bits peut prendre différentes valeurs.

Magnitude du signe

Cette expression est utilisée pour désigner le fait que l'on réserve un bit pour coder le signe. Par exemple, sur 4 bits nous pouvons coder en binaire 16 valeurs, de 0 à +15.

Si nous employons la magnitude du signe, nous pouvons coder 15 valeurs de -7 à +7 :

  • de 0 (0000) à -7 (0111)
  • de 0 (0000) à +7 (1111)

Le problème avec ce type de représentation est que la valeur 0 pourrait utiliser aussi bien le code binaire 1000 que 0000. Nous perdons donc une valeur à coder.

Notation excess symétrique

Un des moyens de représenter des nombres négatifs est la représentation excess.
Chaque valeur est codée sur un nombre de bits identiques, nous parlerons donc de notation excess8, excess16, etc.

Le bit de poids le plus significatif détermine le signe du nombre à coder, nous perdons un élément pour la représentation de la valeur maximum.
Normalement, avec 4 bits, nous pouvons coder 16 valeurs différentes de 0 à +15.
En excess8, sur nos 4 bits, nous pouvons coder 16 valeurs différentes de -8 à +7.

« Excess8, j'dois pas avoir 8 bits ? »

Non, généralement, le chiffre qui suit le terme excess est la valeur du MSB [“Most Significant Bit”[1]].
Dans le cas de 4 bits, la valeur du bit de poids le plus fort est 8, nous parlons donc de notation excess8.
Dans le cas de 5 bits, la valeur du bit de poids le plus fort est 16, nous parlons donc de notation excess16, etc.

Mais ce n'est pas une règle ! Ce moyen de procéder permet de répartir de manière plus ou moins égale les nombres positifs et les nombres négatifs, mais il est des situations où il est préférable d'avoir plus de nombres négatifs que de positifs, ou inversement. A ce moment, nous ne sommes plus en excess symétrique (la valeur excess ne correspond plus à la valeur du MSB).

Représentation excess8

Représentation
binaire
valeur décimale
si excess8
valeur décimale
si binaire simple
1111715
1110614
1101513
1100412
1011311
1010210
100119
100008
0111-17
0110-26
0101-35
0100-44
0011-53
0010-62
0001-71
0000-80

Astuce

Si nous devons coder en excess, la valeur du MSB est le chiffre qui suit la notation (exemple : excess8).
En ajoutant le signe - devant cette valeur, nous avons la valeur la plus basse, codée sous la forme d'une suite de 0.
Ensuite, la progression est la même que pour le binaire pur, jusqu'au bout.
Au moment où le MSB est à 1, et le reste à 0 nous avons la représentation de la valeur 0.
A la fin, nous avons une suite de 1 qui correspond à la valeur maximum du MSB moins un (dans notre cas : 8-1=7)

Synthèse

En codage excess symétrique, le MSB détermine le signe :

  • 1 pour les nombres positifs.
  • 0 pour les nombres négatifs.

La valeur 0 est considérée comme positive.

 

Notation Excess asymétrique

Une grande partie des règles applicables à la notation excess symétrique ne conviennent plus dans ce cas :

  • Il n'est plus possible de déterminer le signe selon la valeur du MSB.
  • La valeur qui suit le terme excess n'est plus la valeur du MSB.
  • La répartition des positifs et des négatifs ne se fait plus de manière égale.

Exemple : représentation excess 3

Représentation
binaire
valeur décimale
si excess3
valeur décimale
si binaire simple
11111215
11101114
11011013
100912
1011811
1010710
100169
100058
011147
011036
010125
010014
001103
0010-12
0001-21
0000-30

 

Notation en complément à 1

Méthode

Chaque bit du nombre binaire est inversé pour représenter un nombre négatif.

Remarque : la valeur 0 est représentée de deux manières (tout des 1, ou tout des 0). Nous perdons donc la possibilité de codage d'une autre valeur. Avec 4 éléments binaires, nous pouvons coder de la valeur -7 à la valeur 7.

Exemples :

Représentation
binaire
valeur décimale
si compl à 1
valeur décimale
si binaire simple
011177
011066
010155
010044
001133
001022
000111
000000
1111015
1110-114
1101-213
1100-312
1011-411
1010-510
1001-69
1000-78

 

Notation en complément à 2

Le problème avec une notation excess est que toutes les valeurs doivent être traduites.
Si nous inversons le principe de codage du signe, nous avons un 0 pour coder les positifs, et un 1 pour coder les négatifs.

En binaire comme en décimal, placer un 0 devant l'élément de plus forte valeur n'affecte pas cette valeur.
Nous ne devons plus traduire les valeurs positives, il suffit de placer un 0 devant la valeur à coder.

Représentation
binaire
valeur décimale
si compl à 2
valeur décimale
si binaire simple
011177
011066
010155
010044
001133
001022
000111
000000
1111-115
1110-214
1101-313
1100-412
1011-511
1010-610
1001-79
1000-88

Méthode

Il existe différentes méthodes de conversions en complément à 2 pour les valeurs négatives (pas besoin de transformer les valeurs positives) :

1. Valeur négative

1. Valeur négative

Avec 4 bits, nous pouvons coder 16 valeurs.
A cette valeur, nous devons ajouter la valeur négative à coder.

Exemple : coder -3 en complément à 2 sur 4 bits :

  • 16 -3 = 13
  • 1101(2)= 13(10)
  • 1101(2 compl à 2)= -3

2. Porte logique

Coder la valeur en binaire pur, appliquer une porte NOT, ajouter 1 au résultat.

Exemple : coder -3 en complément à 2 sur 4 bits :

30011
NOT 31100
+ 10001
=>1101

3. Cherchez le 1...

Ecrire la valeur en binaire pur.
Parcourir les bits du LSB [“Lower Significant Bit”[3]] vers le MSB :

  • tant que le bit est à 0, ne rien changer.
  • le premier bit à 1 reste inchangé.
  • inverser les autres bits jusqu'au MSB.

Exemple : coder -4 en complément à 2 sur 4 bits :

4 => binaire :0100
MSB <= LSB 1<=<=
Résultat :1100

Synthèse

En complément à 2, le MSB détermine le signe :

  • 0 pour les nombres positifs (pas de modification de la valeur).
  • 1 pour les nombres négatifs.

La valeur 0 est considérée comme positive.

 

Overflow

Nous savons tous qu'en binaire pur, il est possible de coder la valeur +15 sur 4 bits.
Si nous utilisons un élément sans savoir qu'il travaille en excess ou en complément à 2 pour coder les valeurs, nous risquons d'avoir des surprises.
Imaginons que nous désirons introduire la valeur 12 en 4 bits (1100) :

  • si la valeur est traitée en binaire, pas de problème, le résultat est 12.
  • si la valeur est traitée en excess8, le résultat est 4.
  • si la valeur est traitée en complément à 2, le résultat est -4.

Autres exemples :

Prenons 3 éléments pour coder un nombre décimal : nous avons 1000 valeurs, de 000 à 999.

L'utilisation de deux nombres corrects (qui entrent dans cet espace entre 000 et 999) dans une opération peut générer un nombre qui ne respecte pas cet espace.

600 + 600 = 1200 => “overflow” (en français, « dépassement de capacité ») car le codage nécessite 4 éléments décimaux au lieu de 3.
003 - 005 = -2 => “overflow”[6] car le codage nécessite un élément non prévu pour déterminer que le nombre est négatif.
050 * 050 = 2500 => “overflow”[7] car le codage nécessite 4 éléments décimaux au lieu de 3.
007 / 002 = 3,5 => “overflow”[8] car le codage nécessite une virgule non prévue (codage d'entiers positifs seulement).

L'“overflow”[9] est un dépassement de mémoire, car le nombre de bits que nous avons à notre disposition est insuffisant pour coder l'information.

 

Les fractions binaires

De même que pour les nombres négatifs, la notation en virgule flottante utilise certains bits pour l'information, au détriment des bits de valeur.
Pour un octet, le principe est le suivant :

  • Un bit (sign bit) est réservé pour déterminer le signe.
  • 3 bits (exponent bits) sont réservés pour placer la virgule (le point en anglais, d'où l'appellation "floating point").
  • 4 bits (mantissa bits) sont réservés pour coder la valeur.

! La notation en virgule flottante utilise les deux notations vues préalablement :

  • Complément à 2 pour le bit de signe.
  • Excess pour l'exposant.
    • Exposant égal à 0 : 0.mantisse
    • Exposant positif : déplacement du point vers la droite.
    • Exposant négatif : déplacement du point vers la gauche.

Exemples

Pour nos exemples, nous travaillerons à chaque fois sur un octet.

10111100 => 1 011 1100

  • bit de signe : 1 => valeur négative
  • exposant : 011 => 3-4 = -1 (Excess)
  • mantisse : 1100 => 0.01100 = 1/4 + 1/8 = 3/8

10111100 => -3/8

01101011 => 0 110 1011

  • bit de signe : 0 => valeur positive
  • exposant : 110 => 6-4 = 2 (Excess)
  • mantisse : 1011 => 10.11 = 2 + 1/2 + 1/4 = 2,75

01101011 => 2,75

Round-off errors

Nous parlerons d'erreurs d'arrondi (round-off) lorsque nous désirerons par exemple coder la fraction 1/3.
Nous pouvons coder les puissances de 2 telles que 1/2, 1/4, 1/8, mais pas 1/3.
Le résultat sera donc approximatif, et nous perdons une partie de l'information.

 

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Notes

  1. a,b,c,d,e,f,g,h,i,j,k,l,m Most Significant Bit : correspond à « bit de poids significatif” en français

  2. a,b,c,d,e,f,g,h,i,j,k,l MSB : “Most Significant Bit” (en français, « bit de poids significatif »)

  3. a,b,c Lower Significant Bit : correspond à « bit de poids faible” en français

  4. a,b LSB : “Lower Significant Bit” (en français, « bit de poids faible »)

  5.  overflow : correspond à « dépassement de capacité” en français

  6.  overflow : correspond à « dépassement de capacité” en français

  7.  overflow : correspond à « dépassement de capacité” en français

  8.  overflow : correspond à « dépassement de capacité” en français

  9.  overflow : correspond à « dépassement de capacité” en français

 

Historique et modifications de la page

  • Samedi 16 Janvier 2010, 07:28 : Prise en charge automatique des acronymes, mots étrangers, et recherche de table de matières.
Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-341
Document créé le 14/02/04 11:17, dernière modification le Vendredi 17 Juin 2011, 11:11
Source du document imprimé : http:///www.gaudry.be/binaire.html
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Apparence (afficher)
Stats (afficher)
15838 documents
455 astuces.
550 niouzes.
3107 definitions.
447 membres.
8121 messages.

Document genere en :
0,10 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
Quand Google ne trouve pas quelque chose, il demande à Chuck Norris.

Anonyme [Chuck Norris fact]
 
l'infobrol
Nous sommes le Mercredi 22 Novembre 2017, 17:22, toutes les heures sont au format GMT+1.00 Heure, heure d'hiver