C9 Représentation des entiers ¶
Cours¶
Attention
Ce diaporama ne vous donne que quelques points de repères lors de vos révisions. Il devrait être complété par la relecture attentive de vos propres notes de cours et par une révision approfondie des exercices.
Travaux pratiques¶
Exercice 1 : Du binaire au décimal¶
Ecrire une fonction bin_to_dec
qui convertit un nombre en écriture binaire (donnée sous la forme d'une chaine de caractères composées de '0' et de '1') en écriture décimale. Par exemples,
bin_to_dec("10011")
doit renvoyer 19 car \(\overset{\displaystyle{_{2^4}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^3}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^2}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^1}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^0}}}{\boxed{\strut1}}\) = \(19\),bin_to_dec("11000100")
doit renvoyer 196 car \(\overset{\displaystyle{_{2^7}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^6}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^5}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^4}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^3}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^2}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^1}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^0}}}{\boxed{\strut0}}\) = \(196\),bin_to_dec("1001100")
doit renvoyer 76 car \(\overset{\displaystyle{_{2^6}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^5}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^4}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^3}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^2}}}{\boxed{\strut1}}\overset{\displaystyle{_{2^1}}}{\boxed{\strut0}}\overset{\displaystyle{_{2^0}}}{\boxed{\strut0}}\) = \(76\).
Aide
On pourra parcourir par indice la chaine de caractère représentant l'écriture binaire à partir de la fin (chiffre de "poids" \(2^0\)) et en revenant au début.
Exercice 2 : De l'hexadécimal au binaire¶
-
Ecrire une fonction
valeur_chiffre
qui prend en argument un caractère représentant un chiffre en base 16 et renvoie la valeur de ce chiffre en base 10. Par exemplevaleur_chiffre('8')
renvoie 8, etvaleur_chiffre('E')
renvoie 14.Aide
On pourra utiliser le fait que les lettres
A
,...,E
ont des codes ascii consécutifs et utiliser la fonctionord
de Python qui renvoie ce code. -
Ecrire une fonction
hex_to_dec
qui prend en argument un nombre écrit en base 16 et renvoie l'écriture décimale de ce nombre. Par exemplehex_to_dec("C7E")
renvoie3198
car \((C7E)_{16} = (12\times 16^2 + 7\times16 + 14)_{10}\)
Exercice 3 : Algorithme des divisions succesives¶
Le but de l'exercice est d'écrire une implémentation en Python de l'algorithme des divisions successives qui permet de convertir un nombre écrit en base 10 dans une base \(b\) quelconque (\(b \geqslant 2\)).
On rappelle que l'algorithme consiste tant que \(n\) n'est pas nul à :
- Ajouter le reste dans la division euclidienne de \(n\) par \(b\) à l'écriture en base \(b\)
- remplacer \(n\) par le quotient de \(n\) dans la division euclidienne par \(b\)
Si \(b>10\), on utilise comme chiffre les lettres de l'alphabet, on déclare donc en début de programme une chaine de caractères :
-
Ecrire une fonction
dec_to
qui prend en argument un entiern
(typeint
) écrit en base 10 et une baseb
(supérieur ou égale à 2) et renvoie l'écriture den
dans la baseb
-
Tester votre fonction en affichant l'écriture en base
29
de620647
(on rappelle qu'il y a 29 chiffres en base 29, les premiers sont0,1, .. ,9
et après on utilise les lettresA, B, ...
).
Vérfier votre réponse -
Ecrire une fonction
base_to_dec
qui prend en argument une chaine de caractère représentant un nombre écrit dans une base \(b \geqslant 2\) ainsi que cet entier \(b\) et renvoie l'écriture décimale de ce nombre. Par exemplebase_to_dec("210112",3)
renvoie 581, car le nombre est donné en base 3 et \(2 \times 3^5 + 3^4 + 3^2 + 3^1 + 2\times3^0 = 581\)
Exercice 4 : Complément à deux¶
-
Ecrire une fonction Python
binaire(entier)
qui prend en entrée un entier compris entre 0 et 127 et renvoie une chaîne de caractère contenant la représentation binaire de cet entier sur un octet. Par exemplebinaire(42)
renvoie"00101010"
. -
Ecrire une fonction Python
inverse_bit(chaine)
qui prend en entrée une chaîne de caractère et renvoie la chaîne dans laquelle tous les 0 ont été remplacés par des 1 et tous les 1 par des 0. Par exempleinverse_bit("10110001")
renvoie"01001110"
-
Ecrire une fonction Python
ajoute_un(chaine)
qui prend en entrée une chaîne de caractères et effectuer l'addition binaire de 1 au nombre binaire représenté par cette chaine. Par exempleajoute_un("1001010")
renvoie1001011
. -
En utilisant les fonctions ci-dessus, écrire une fonction Python qui renvoie la représentation en complément à deux sur 8 bits d'un entier passé en paramètre.