TP Représentation des données: les entiers⚓︎
Un point de cours⚓︎
La mémoire des ordinateurs est constituée d’une multitude de petits circuits électroniques (des transistors) et chacun ne peut être que dans deux états électriques : notés arbitrairement 0 et 1. La valeur 0 ou 1 d’un circuit mémoire élémentaire s’appelle un chiffre binaire, un booléen ou un bit (abréviation de binary digit). Depuis les années 1970, l’unité de mesure de l’espace (disque ou mémoire) est l’octet ou byte. Un octet correspond à 8 bits. Un octet peut donc prendre \(2^8 = 256\) valeurs différentes.
En pratique, le processeur d’un ordinateur échange avec la mémoire des informations (données ou adresse mémoire) comportant plusieurs octets de 4 à 8 en général. On parle de mots qui caractérisent l’architecture de la machine (32 bits ou 64 bits).
Tout type d’information (nombre, caractère, couleur . . . ) peut être stocké sous forme de séquence de bits. Une représentation interne ou codage est nécessaire pour définir une représentation binaire. Dans ce chapitre, nous aborderons les codages simples des nombres entiers positifs et des entiers relatifs.
Représentation interne des entiers naturels en base 10⚓︎
- Itérer sur une chaine de caractère : recopier le code suivant et analyser la réponse.
mot = "bonjour" for caractere in mot: print(caractere)
L’entier naturel 7307 s’écrit en base 10 comme une séquence de quatre chiffres dont le poids dépend de leur position dans l’écriture.
Séquence de chiffres 7 3 0 7 Position 3 2 1 0 Poids \(10^3\) \(10^2\) \(10^1\) \(10^0\) La décomposition de 7307 en base 10 s’écrit donc :
\(7307 = 7×10^3 +3×10^2 +0×10^1 +7×10^0\)
-
Convertir un texte en nombre : sachant que l'on peut itérer sur les caractères d'une chaine, proposer une fonction python
convertCN(nombre)
algorithme permettant de convertir la chaine de caractèrenombre
correspondant à un entier à un entier sans utiliser la fonctionint()
sur la totalité de la chaine. -
On considère l'algorithme suivant (en langage naturel):
Fonction horner(chaine) nombre prend la valeur 0 Pour chiffre dans chaine # on commence par les chiffres de poids forts nombre prend la valeur nombre x 10 nombre prend la valeur nombre + chiffre Renvoyer nombre
- Appliquer (à la main) cet algorithme au nombre
7307
- Créer la fonction python
convertCNHorner(nombre)
implémentant cet algorithme (nombre sera de typestr
)
Représentation interne des entiers naturels en base 2⚓︎
L'entier 1110 en base 2 est une séquence de 4 bits dont le poids dépend de leur position dans l'écriture.
Séquence de bits 1 1 1 0 Position 3 2 1 0 Poids \(2^3\) \(2^2\) \(2^1\) \(2^0\) Le nombre 1110 en base 2 vaut donc en base 10: \(1110 = 1×2^3 +1×2^2 +1×2^1 +0×2^0 = 13\)
Pour éviter distinguer l'écriture en base 2 de celle en base 10 on écrira \(\overline{1110}^2 = 13\)
- Quel est le plus grand entier non signé qu’on peut représenter en base 2 sur 64 bits ? sur n bits ?
- Modifier les fonctions précédentes pour que les conversions fonctionnent en base 2.