Par défaut, les valeurs de type int
sont en Python toujours exprimés en base 10.
Des nombres binaires ou hexadécimaux seront par contre toujours des chaînes de caractère, préfixées par 2 caractères indiquant la base utilisée :
Exemple :
'0b10111101'
Exemple :
'0xf6c5'
Il existe bien sur des fonctions directement disponibles dans Python pour convertir d'une base dans une autre :
Pour la conversion base 10 → binaire, utiliser la fonction bin()
:
Exemple :
>>> bin(245)
'0b11110101'
Et pour l'inverse ( binaire → base 0 ) :
>>>int('0b10101',2)
21
Pour la conversion base 10 → hexadécimal, utiliser la fonction hex()
:
Exemple :
>>> hex(245)
'0xf5'
Et pour l'inverse ( hexadécimal → base 10 ) :
>>> int('0xf5',16)
245
Mais le but est bien entendu que vous codiez vous-mêmes les algorithmes permettant ces conversions; ces fonctions doivent seulement vous permettre de vérifier le bon fonctionnement de vos scripts.
Écrire un programme qui demande à l’utilisateur d'entrer une valeur binaire et qui la convertit en base 10
L’utilisateur rentrera le nombre binaire à convertir, qui sera stocké dans une variable de type chaîne ( ce que retourne justement la fonction input()
, ça tombe bien !!! ).
Votre script devra "traiter" cette chaîne de façon à obtenir la valeur en base 10 correspondante.
Il faut coder l'algorithme que vous venez d'établir.
Attention, vous allez donc parcourir la chaîne entrée par l'utilisateur "depuis la gauche", donc dans l'ordre des puissances de 2 décroissantes. Il faut en tenir compte !
Pour simplifier, vous pouvez dans un premier temps écrire un script qui impose à l'utilisateur d'entrer des valeurs binaires avec un certain nombre de bits ( 8 par exemple ); vous améliorerez ensuite votre script de façon à ce qu'il s'adapte à des nombres ayant un nombre quelconque de bits.
binaire ← chaîne entrée par l'utilisateur
decimal ← 0
expo ← exposant de la plus grande puissance de 2 dans le nombre binaire à convertir
pour chaque caractère de la chaîne :
si le caractère est égal à 1 :
alors ajouter 2**'expo' au contenu de la variable 'decimal'
sinon ne rien lui ajouter
décrémenter la variable 'expo'
afficher variable 'decimal'
Écrire un programme qui demande à l’utilisateur d'entrer un nombre en base 10 et qui le convertit en nombre binaire
Le nombre binaire recherché sera constitué d'une suite de caractères '0' ou '1'.
Cette chaîne se construira au fur et à mesure des divisions successives, en lui concaténant les '0' et les '1' obtenus par les calculs. D'après le principe de l'algorithme, il faut prendre l'ensemble des restes "à l'envers" pour obtenir les bits dans le "bon ordre"; autrement dit, il faut concaténer chaque bit calculé au début de la chaîne pour les avoir dans l'ordre correct à la fin de la boucle...
decimal ← valeur entrée par l'utilisateur
binaire ← chaîne vide
quotient ← initialisée à n'importe quelle valeur différente de 0
tant que 'quotient' n'est pas nul :
calculer 'quotient' entier de 'decimal' par 2
calculer 'reste'
ajouter 'reste' au début de la chaîne 'binaire'
remplacer la valeur de 'decimal' par celle de 'quotient'
afficher variable binaire
Écrire un programme qui convertit un nombre binaire sur un octet en son équivalent en hexadécimal.
Rappelez-vous la méthode pour convertir un octet en hexadécimal : il faut le séparer en deux groupes de 4 bits, et convertir chaque groupe en un nombre de 0 à 16 codé par les symboles 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e et f.
Si le nombre binaire est stocké comme précédemment dans une chaîne de caractères, il faut donc disposer d'une méthode pour la séparer en deux parties : vous utiliserez pour cela la notion de séquence vue dans le cours sur les chaînes de caractères. Vous pouvez également consulter le mémento...
Par exemple :
Pour convertir du binaire au décimal, on peut reprendre le programme de l'application 1, ou, de manière plus simple, utiliser les fonctions intégrées à Python.
base16 ← '0123.....ef'
binaire ← entrée utilisateur
groupe1 ← séquence des 4 premiers caractères de 'binaire'
groupe2 ← séquence des 4 derniers caractères de 'binaire'
conversion en base 10 de 'groupe' et de 'groupe2'
hexa ← caractère d'index 'groupe1' dans la chaîne 'base16' + caractère d'index 'groupe2' dans la chaîne 'base16'
afficher hexa
Quelle heure est-il en hexadécimal ? Vous trouverez l'horloge ici...