Entiers - Binaire

Représentation des entiers - Correction des applications

1. Conversion binaire → décimal

Proposition de script :


binaire = input('Entrez le nombre binaire :')
decimal = 0
expo = 7 # pour un octet, la puissance correspondant au MSB est 7, pas 8 !!

for car in binaire:
	if car == '1':
		decimal += 2**expo
	expo -= 1

print("Valeur en base 10 :",decimal) 
			

Remarques :

Adaptation du script à un nombre quelconque de bits

Le script précédent ne peut traiter qu'un nombre à 8 bits; que faut-il changer pour qu'il "fonctionne" avec un nombre binaire comportant un nombre quelconque de bits ?

La seule chose à modifier est la valeur initiale de la variable expo. Il faut lui donner "automatiquement" la valeur de la puissance de 2 correspondant au MSB, qui est toujours le caractère le plus à gauche du nombre binaire.

Avec un peu de réflexion, on arrive à la conclusion que la puissance de 2 correspondant au MSB est toujours égale au nombre de bits dans la valeur binaire, moins 1 :

Mathématiquement, cela est lié au fait qu'avec N bits, on peut exprimer au maximum 2N - 1 nombres différents.

Reste alors le problème de déterminer le nombre de bits dans la chaîne entrée par l'utilisateur. Facile ! Il est égal au nombre de caractères dans cette chaîne, donné par la fonction len().
On initialisera donc ainsi la variable expo :


expo = len(binaire) - 1
			

Une version la plus optimisée possible...

Un bon programmeur va toujours chercher à avoir un code le plus "compact" possible, et ce parfois au détriment de la lisibilité de ce code...

On peut remplacer la condition et l'ajout de la puissance de 2 par une évaluation "automatique" :


decimal += int(car)*(2**expo)
			

L'instruction cumule l'évaluation et l'ajout de la puissance de 2 en utilisant les propriétés de la multiplication :

2. Conversion décimal → binaire

Proposition de script :


decimal = int(input('Entrez le nombre décimal :'))
binaire = ''
quotient = decimal 

while quotient != 0 :
	quotient = decimal // 2
	reste = decimal % 2
	binaire = str(reste) + binaire
	decimal = quotient

print("Valeur binaire :",binaire) 
			

Remarques :

3. Conversion binaire → hexadécimal

Proposition de script :


base16 = '0123456789abcdef'
binaire = input("Entrez l'octet en binaire :")

groupe1 = binaire[0:4]
groupe2 = binaire[4:8]

index1 = int('0b'+groupe1 , 2)
index2 = int('0b'+groupe2 , 2)

hexa = base16[index1] + base16[index2]

print('La valeur hexadécimale est :','0x' + hexa) 
			

Remarques :