Représentation des entiers

Algorithmes et scripts Python de conversion entre différentes bases

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 :

  • '0b' si il s'agit de nombres binaires.

    Exemple :

    
    	'0b10111101'
    						
  • '0x' si il s'agit de nombres hexadécimaux.

    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.

Conversion binaire → base 10

Travail à faire :

É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.

Rappel de l'algorithme :

	
	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'
			

Lien vers la RÉPONSE

Conversion base 10 → binaire

Travail à faire :

É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...

ALGORITHME

						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
					

Lien vers la RÉPONSE

Conversion binaire → hexadécimal

Travail à faire :

É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...

Quelques indications :

ALGORITHME

	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
					

Lien vers la RÉPONSE

Quelle heure est-il en hexadécimal ? Vous trouverez l'horloge ici...