TP 2 : Vendredi 13 Septembre 2013
Codage des nombres entiers relatifs
Continuons à coder notre monde
Partie du programme : Représentation de l’information
La mémoire des ordinateurs est constituée d’une multitude de petits circuits électroniques qui, chacun, ne
peuvent être que dans 2 états : hors tension ou sous tension.
Comme il a fallu donner un nom à ces états, on a décidé de les appeler 0 et 1.
Un tel circuit à 2 états s’appelle un circuit mémoire un bit.
Le nombre entier naturel 13, représenté en base 2 par :  est donc représenté dans la mémoire d’un
ordinateur par le mot 1101, c’est-à-dire par 4 circuits mémoire un bit respectivement dans les états 1, 0, 1, 1.
Les circuits mémoire un bit sont souvent groupés par huit (octet) et on utilise des nombres exprimés en
langage binaire sur un, deux, quatre ou huit octets soit 8, 16, 32 ou 64 bits.
Sur un octet, on peut représenter les nombres entiers naturels allant de 0 à :     
Sur deux octets, on peut représenter les nombres entiers naturels allant de 0 à :
      
Sur quatre octets, on peut représenter les nombres entiers allant de 0 à   
Sur huit octets, i.e. 64 bits : on peut représenter tous les nombres entiers naturels allant de 0 à   .
Dans le langage Python, on ne peut manipuler que des nombres entiers relatifs : tous les entiers sont signés.
Il faut étendre aux entiers relatifs la représentation binaire des entiers naturels.
1ère solution naturelle : réserver un bit pour le signe et utiliser les autres pour représenter sa valeur
absolue.
Ainsi, avec des mots de 16 bits, si on utilise 1 bit pour le signe et 15 bits pour la valeur absolue, on pourrait
représenter les entiers relatifs allant de :
-  = -    = - 32 767 à  =    = 32 767.
Inconvénient de cette méthode (entre autres) : existence de deux zéros l’un positif et l’autre négatif !
Solution choisie : la notation en complément à 2.
On va représenter un entier relatif par un entier naturel. Si on utilise des mots de 16 bits, on va pouvoir
représenter les entiers relatifs de -32 768 à 32 767 en procédant ainsi :
Représentation binaire :
Un ordinateur est une machine qui manipule
des valeurs numériques représentées sous
forme binaire.
Compétence :
Manipuler à l’aide d’opérations élémentaires
les trois unités de base : bit, octet, mot.
Numérisation :
L’ordinateur manipule uniquement des valeurs
numériques. Une étape de numérisation des
objets du monde physique est donc
indispensable.
Compétence :
Coder un nombre, un caractère au travers d’un
code standard, un texte sous forme d’une liste
de valeurs numériques.
Numériser une image ou un son sous forme d’un
tableau de valeurs numériques.
Si l’entier relatif x est positif ou nul : on le représente comme l’entier naturel x.
Si l’entier relatif x est strictement négatif : on le représente comme l’entier naturel x +  = x + 65 536,
nombre entier compris entre -32 768 + 65 536 = 32 768 et -1 + 65 536 = 65 535.
Schéma :
-32 768 ; -32 767 ; …….. ; -1 0 ; 1 ; ……….… ; 32 767 ; 32 768 ; 32 769 ; ………… ; 65 535
Comment est codé le nombre entier relatif -1 ?
Il est représenté dans l’ordinateur comme l’entier naturel 65 535 l’est soit :
   1111 1111 1111 1111.
SYNTHESE : Plus généralement, avec des mots de n bits, on peut représenter les entiers relatifs compris
entre  et   
On représente l’entier relatif x positif ou nul comme l’entier naturel x.
On représente l’entier relatif x strictement négatif comme l’entier naturel x + .
Ainsi, un entier positif est représenté par un mot dont le premier bit sera 0, et un entier négatif par un mot
dont le premier bit sera 1.
Expliquons le dernier cas dans le cas des nombres codés sur 16 bits :
32 768 = donc tout nombre entier compris entre 32 768 et 65 535 a forcément son bit le plus fort égal à
1.
Exemple : 32 770 = 32 768 + 2 =  = 1000 0000 0000 00102.
Au contraire, un entier positif codable sur 16 bits, varie entre 0 et 32 767 : 32 767 < 
Donc si on prend par exemple, 16 384 =  = 0100 0000 0000 00002.
Comment savoir si l’entier sera codé sur 16 bits ? 32 bits ?
Rien dans la représentation binaire n’indique comment il faut interpréter un mot mémoire donné.
Le même mot peur être lu de différentes façons.
Il faut donc garder à part une trace des conventions de codage qu’on a décidé d’utiliser.
Dans les versions Python 2.x, le type int désigne en principe des entiers relatifs représentés sur 32 bits, cad 4
octets : les valeurs possibles sont donc de 2 147 483 648 à 2 147 483 647.
Mais, si on travaille sur une machine 64 bits, la représentation des entiers sera également faite sur 64 bits :
on dispose donc des entiers de -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807 !!!
L’ensemble des valeurs de type int dépend donc de la machine sur laquelle un programme Python est
exécuté.
Exercices :
1°) Quels entiers relatifs peut-on coder sur huit bits ?
2°) Trouver les représentations sur huit bits des entiers relatifs 0 et -128, 127, 101 et -94 :
3°) Déterminer les valeurs des entiers relatifs codés sur huit bits par :
0001 0111 et 1000 1100
4°) Calculer la représentation sur huit bits de l’entier relatif 11, puis celle de son opposé :
Remarque : on inverse tous les bits et on ajoute 1
Dépassement de Capacité : Que se passe-t-il quand on atteint les limites ?
On suppose une représentation sur 32 bits.
a = 260
a * a = 67 600
a * a * a = 17576000
a * a * a * a = 4569760000
Ce dernier résultat, en binaire est codé par : 1 00010000 01100001 00000001 00000000.
Si on reste dans une représentation en 32 bits, le bit le plus à gauche est perdu ! On ne mémorise que
00010000 01100001 00000001 00000000 qui vaut 274 792 704. Ce n’est pas le résultat attendu !!
On appelle ce phénomène dépassement arithmétique (overflow en anglais)
En Python, on retiendra que, la seule limite pour la représentation des entiers, qu’ils soient naturels ou
relatifs, est la mémoire disponible sur la machine. L’exemple précédent ne se produira pas !
Dans les versions Python 2.x, lorsque la capacité des entiers machines (32 ou 64 bits) a été dépassée, les
nombres sont suivis du marqueur L, qui explicite qu’on passe dans un autre type appelé long.
On aurait donc plutôt comme ligne : 4569760000L
En Python 3.x, les types int et long ont été fusionnés, et on retient que les entiers sont toujours de taille
illimitée, le marqueur L n’est plus utilisé.
Types de données, structures de contrôles, fonctions version Python 3.3.2.
Une boîte ne sait pas comment elle s’appelle. C’est à nous de lui donner un nom, et une forme.
Un ordinateur peut bien faire des choses, mais il faut d’abord les lui expliquer.
Un ordinateur est fait pour exécuter des calculs longs et répétitifs.
Partie du programme : Algorithmique
Partie du programme : Langages et programmation
I/ Algorithmique :
Diaporama
II/ Programmation en Python : (source : Université du Sud Toulon Var)
Algorithmes simples :
Compétence :
Comprendre un algorithme et expliquer ce qu’il
fait.
Modifier un algorithme existant pour obtenir
un résultat différent.
Concevoir un algorithme.
Programmer un algorithme.
Types de données :
Nombre entier ;
Virgule flottante ;
Booléen ;
Caractère ;
Tableau ;
Chaîne de caractères.
Compétence :
Choisir un type de données en fonction d’un
problème à résoudre.
Fonctions :
Notion de fonction ;
Portée des variables et passage d’arguments ;
Compétence :
Concevoir l’entête d’une fonction, puis la
fonction elle-même.
1°) Les variables :
1 / 14 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !