Delphi
Borland

Codification
Codage
Numération

 

 

Codage de l’information

Un octet peut représenter plusieurs choses selon la variable qui a été déclarée :

Alphanumérique (texte)

Code ASCII première et seconde page.

La première page peut être interprétée comme étant codée sur 7 bits avec le bit de poids fort à 0. La seconde page correspond alors au bit de poids fort à 1.

Arithmétique non signée

Retour en haut de la page

Il est impossible en informatique de représenter tous les éléments de N

Nous ne pouvons représenter qu’un nombre fini d’entiers, appartenant à un intervalle donné [0; 2n-1], où n correspond au nombre de bits utilisés

Nombre non signé, sur un octet.

min=O=OOOOOOOO=OO

max=255=11111111=FF=28-1

Nombre non signé sur deux octets

min=0

max=1111111111111111=FFFF=216-1=65535

Nombre non signé sur 4 octets

min=0

max=FFFFFFFF=232-1=65536² -1= 4 294 967 295

Nombre non signé sur n octets

min=0

max=28n-1

Arithmétique signée

Retour en haut de la page

Représentation bornée de Z

Nombre signé sur un octet

Codé sur un octet, le bit de poids fort, est considéré comme bit de signe.

Convention habituelle : si ce bit vaut zéro, le nombre est considéré comme positif.

Il varie donc entre 0 et 1111111=27-1=127

Si ce bit vaut 1, le nombre est négatif.

Il en résulte que 0 a deux représentations +0=00000000 et -0=10000000

L’intervalle de Z est donc [-27+1 , 27-1]=[-127 , +127]

Bit de signe

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

nombre

0

0

0

0

0

0

0

0

0

+0

0

1

1

1

1

1

1

1

1

+127

1

0

0

0

0

0

0

0

0

-0

1

1

1

1

1

1

1

1

1

-127

1

1

0

0

1

1

0

1

1

-27

Nombre signé sur deux octets

L’intervalle de Z est donc [-215+1 , 215-1]=[-32767 , +32767]

Nombre signé sur quatre octets

L’intervalle de Z est donc [-231+1 , 231-1]=[- 2147483647 , + 2147483647

Nombre signé sur n octets

L’intervalle de Z est donc [-28n-1+1 , 28n-1-1]

Les problèmes des nombres signés.

Comme nous l’avons vu, le microprocesseur ne connaît que l’addition.

Par exemple en représentation sur un octet, ajoutons 213 à 125 nous obtenons le nombre 338 qui est supérieur à 255, il y a donc débordement. En effet en binaire nous obtenons : 11010101+ 1111101= 101010010

Addition et soustraction en binaire

Retour en haut de la page

Tables d’addition et de soustraction

0+0=0 ; 1+0=1; 1+1=10 (donc retenue dans ce cas)

1-0=1 ; 10-1=1;0-0=0 ; 1-1=0

Exemple sans débordement

Ajoutons les nombres 12 et 56 en binaire non signé sur un octet.

12+56=00001100+00111000=01000100=68

Exemple avec débordement

Ajoutons les nombres 143 et 209 en binaire non signé.

143+209=10001111+11010001=1 01100000=352

L’assembleur prévoit cette situation (Carry)

Mais en programmation, certains flags n’ont pas le même sens en arithmétique signée et en arithmétique non signée. Le programmeur doit donc savoir quels types de nombres il manipule.

Le complément à 2 sur n bits

Cette technique va permettre d’avoir une autre représentation binaire des nombres négatifs en arithmétique signée.

Le nombre est positif ou nul

Le nombre est négatif

exemples

Le complémentaire à deux permet de transformer une soustraction en une addition

Représentation sur un octet

Prenons le nombre 7. Sa représentation binaire sur 8 bits est 00000111.

Prenons le nombre -5. Sa valeur absolue sur 8 bits s’écrit 00000101.

On complémente à 1 ce qui donne 11111010

On ajoute 1 ce qui donne 11111011

Calculons 7-5=00000111+11111011= 100000010. Les huit derniers bits permettent bien de trouver 2, mais il y a un débordement (dernier bit ).

Autre exemple

Pour 40-22 on peut poser 101000-10110 faire la soustraction directement ce qui donne 10010 c'est-à-dire 18.

On peut aussi considérer que l’opération se fait sur 6 chiffres car 40 s’écrit en binaire sur 6 chiffres, et appliquer la régle des complémen-taires à 1 puis à 2 à -22, en tenant compte du zéro devant.

puis on ajoute 101000+101010 ce qui donne 1010010. Soit, en ne tenant compte que de 6 chiffres, 010010, c'est-à-dire 18

Représentation sur 4 bits

Nombre

Valeur absolue

Complémentarité à 1

si nombre négatif

Complémentarité à 2 (ajoutons 1)

0

0000

 

0000

1

0001

 

0001

2

0010

 

0010

3

0011

 

0011

4

0100

 

0100

5

0101

 

0101

6

0110

 

0110

7

0111

 

0111

-1

0001

1110

1111

-2

0010

1101

1110

-3

0011

1100

1101

-4

0100

1011

1100

-5

0101

1010

1011

-6

0110

1001

1010

-7

0111

1000

1001

-8

1000

0111

1000

Avec 8 nous aurions obtenons 1000 soit la même représentation que -8. Nous obtenons ainsi une représentation modulo 16

Exemples en TURBO PASCAL

Les nombres de type BYTE en Turbo Pascal illustrent les nombres non signés, et les nombres de type SHORTINT les nombres signés avec complémentarité à 2.

Seuls les nombres de type INTEGER sont normalisés et correspondent au Pascal Standard.

Multiplication et division binaire

Retour en haut de la page

Tables

0*0=0 ; 0*1=0 ; 1*0=0 ; 1*1=1

Exemples

Calculer en binaire le produit des nombres 34 et 57 en base dix.

Code DCB

(Le DCB est donné à titre d’information. Il ne fait pas parti du programme de l’examen).

Signification : Décimal Codé Binaire.

Chaque chiffre du nombre est codé sur 4 bits

0

1

2

3

4

5

6

7

8

9

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

Il en résulte que les combinaisons de 1010 à 1111 sont inutilisées.

Prenons par exemple le nombre 8362

8

3

6

2

1000

0011

0110

0010

DCB compacté

Deux chiffres par octet

Le nombre 8362 s’écrit sur deux octets 10000011 01100010

DCB non compacté

Un seul chiffre par octet

Le nombre 8362 s’écrit sur quatre octets 00001000 00000011 00000110 00000010

Opérations en DCB

Le résultat est inférieur ou égal à 10

Ajoutons les entiers naturels 5 et 3 en base dix.

5+3=0101+0011=1000=8 pas de problème

Le résultat est supérieur à 10

Ajoutons les entiers 7 et 6 en base dix.

7+6=0111+0110=1101. Cette représentation n’a pas de signification.

Or sur 4 bits ont peut représenter seize états. 6 de ces états n’ont pas de signification en DCB. Ajoutons 6 au résultat précédent :

1101+0110=10011 que l’on peut écrire 0001 0011 qui code 1 et 3 soit 13

Lorsque le résultat n’a pas de signification, il faut ajouter 6 (0110).

Exemple

Calculer en DCB 867+315

Premier nombre

 

8

6

7

Deuxième nombre

 

3

1

5

Premier nombre

 

1000

0110

0111

Deuxième nombre

 

0011

0001

0101

Somme DCB

 

1011

0111

1100

Correction (+6)

 

0110

 

0110

Nouvelle somme

1

0001

1000

0010

Traduction décimale

1

1

8

2

Représentation des réels

Retour en haut de la page

Les informaticiens parlent de la représentation des réels par abus de langage. Toutes les représentations numériques étant limitées à n octets, seules certains nombres décimaux seront représentés (le nombre n d’octets étant choisi en fonction du nombre de chiffres significatifs souhaités). Les réels en informatique ne sont qu’un sous ensemble des nombres décimaux.

Représentation en virgule fixe

Les nombres sont représentés sous forme naturelle avec la précision prévue sur les parties entières et décimales.

La virgule n’a pas de réalité physique, elle correspond simplement à un rang.

Cette notation ne peut être utilisée que pour des nombres qui ont le même ordre de grandeur.

Par exemple, avec une précision de 4 chiffres sur les deux parties.

 

Nombre

Partie entière

Partie décimale

645

0645

0000

23,789

0023

7890

0,48515

0000

4851

Multiplication

   Multiplication binaire

Multipliez en binaire 11 par 12

1011*1100=10000100 soit 132

Il est clair que si chaque nombre binaire est codé sur n bits, le résultat est codé sur 2n bits.

Si chacun de ces nombres binaires représente un nombre à virgule, le problème de la précision va se poser sérieusement.

Sur une calculatrice essayez l’algorithme suivant, qui part de n=2 et devrait aboutir à n=2.

Début

      n=2;

      Pour i de 1 à 50 faire

     

      Fin du pour

Fin

Il est clair que la précision sur la multiplication risque d’être faible. Dans le cas extrême où les deux nombres utilisent toutes les décimales possibles, nous allons en perdre la moitié sur le produit.

Représentation en virgule flottante.

Cette représentation sera utilisée pour les nombres n’ayant pas le même ordre de grandeur et pour les représentations des ‘réels’ dans la majeure partie des langages.

    Forme normalisée des réels

0,127=+0,127.100 ; 34,12=+0,3412.102 ; -0,000757=-0,757.10-3

Ainsi sous cette forme il faut retenir

·         Le signe du nombre

·         La mantisse

·         Le signe de l’exposant

·         L’exposant

Pour la codification sur n octets (n variant selon les machines et la précision souhaitée) ou pourra par exemple, réserver le premier octet pour l’exposant (le bit de poids fort étant le bit de signe de l’exposant) et les n-1 octets suivants étant utilisés pour la mantisse. Là encore le bit de poids fort est utilisé comme bit de signe de la mantisse.

Ce qui vient d’être dit est valable dans toutes les bases, en particulier en base 2.

Par exemple représentons, en virgule flottante, en base deux, le nombre 103 base dix.

-103=-1100111=-0,1100111*(2)(7)=-0,1100111*10111

l’écriture sera :

Code EBCDIC

Retour en haut de la page

(Ce type d’écriture n’est pas au programme de l’examen. Ce code est donné à titre d’information).

Signification : Extended Binary Code Decimal Information Code

Code utilisé par IBM. En fait, c’est une variation sur 8 bits du code DCB où tout est codifié comme étant des caractères :

Chaque octet est divisé en deux quartets. Si le premier quartet est 1111 alors le deuxième quartet représente un chiffre. Ainsi 1111 0010 représente le chiffre deux. Pour convertir 19 de EBCDIC en DCB : nous partons de 11110001 - 11111001 où :

En supprimant les deux premiers quartets on obtient 00011001 qui est bien le DCB de 19

 

Exemples

 

Exercice 1

Retour en haut de la page

Enoncé

Sur un PC une carte se réserve la zone d’adresses comprise entre EC000 et ED000.

Combien cette carte réserve-t-elle de Ko, de mots ?

Réponse

On appelle MOT un bi-octet soit un groupement de 16 bits.

ED000-EC000=1OOO=163=4096=4Ko=2048 mots

Exercice 2

Retour en haut de la page

Enoncé

On se donne les nombres 157 et 812 en base dix.

Exprimer ces nombres ainsi que leur produit, le quotient et le reste de la division du deuxième par le premier, en hexadécimal et en binaire.

Ecrire 157 en binaire signé sur deux octets.

Ecrire -157 en binaire signé sur deux octets

Ecrire 157 en DCB compacté sur 4 bits

Ecrire 157 en DCB non compacté.

Ecrire 157 en complémentaire à deux sur deux octets

Ecrire -157 en complémentaire à deux sur deux octets

Ecrire -1 en complémentaire à deux sur deux octets

Le Pascal utilise le complémentaire à deux pour représenter le type INTEGER

Ecrire l’INTEGER 32767 en binaire complémentaire à deux,sur deux octets.

Ajouter 1, pour avoir un débordement. Que trouvez-vous en binaire sur les deux octets ?

Ecrire un programme Pascal permettant de vérifier les écritures précédentes. Vérifier en utilisant l’adresse que l’octet de poids faible est écrit avant l’octet de poids fort.

Réponse

157=9D=10011101. 812=32C=1100101100 (Soit 1 mot plus un bit de ébordement)

157*812=127484=1F1FC=1 1111 0001 1111 1100

q=5=5=101

r=27=1B=11011

32767 = 01111111 11111111

32767 +1 =10000000 00000000 = -32768 par NON convention du zero négatif.

Exercice 3

Retour en haut de la page

Enoncé

Ecrire un petit programme en Pascal, pour analyser les problèmes de débordement.

On suppose que i est un Integer.

Partir de i=32767. Calculer et afficher i+1.

Partir de i=-32768. Calculer et afficher i-1.

Correction

Program Essai ;

uses crt ;

var i :integer ;

BEGIN

      i :=32767 ;

      i :=i+1 ;

      writeln(‘32768 donne ‘,i) ;

      i :=-32768 ;

      i :=i-1 ;

      writeln(-32769 donne ‘,i) ;

      readln ;

END.

Codes binaires et imprimantes

 Retour en haut de la page

Sommaire

thiou@univ-tours.fr