Entiers - Binaire
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)
binaire
: on veut bien ici manipuler une chaîne de caractères, pas un nombre !!decimal = decimal + 2**compteur
for
, et pas dans celui de la condition if
! Attention à l'indentation !!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
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 :
int(car)
vaut la valeur 1 : on ajoute à la variable decimal la puissance de 2 multipliée par 1 ( donc on ajoute cette puissance...)int(car)
vaut la valeur 0 : on ajoute à la variable decimal la puissance de 2 multipliée par 0 ( donc on n'ajoute rien ! )
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)
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)
input()
, car la chaîne qui demande l'entrée de l'octet contient une apostrophe ( guillemet simple ).0b
' indiquant qu'il s'agit d'une valeur binaire. 0x
' au début de la chaîne affichée pour respecter l'affichage que donne Python des nombres hexadécimaux...