258 votes

Conversion d'un nombre entier en binaire en python

Afin de convertir un entier en binaire, j'ai utilisé ce code :

>>> bin(6)  
'0b110'

et quand il faut effacer le '0b', j'utilise ceci :

>>> bin(6)[2:]  
'110'

Que puis-je faire si je veux montrer 6 como 00000110 au lieu de 110 ?

2 votes

Duplicata possible de Python int vers binaire ?

471voto

eumiro Points 56644
>>> '{0:08b}'.format(6)
'00000110'

Juste pour expliquer les parties de la chaîne de formatage :

  • {} place une variable dans une chaîne de caractères
  • 0 prend la variable à la position 0 de l'argument
  • : ajoute des options de formatage pour cette variable (sinon, elle représenterait les décimales). 6 )
  • 08 formate le nombre à huit chiffres avec un décalage de zéro sur la gauche.
  • b convertit le nombre en sa représentation binaire

Si vous utilisez une version de Python 3.6 ou supérieure, vous pouvez également utiliser les chaînes de caractères f-strings :

>>> f'{6:08b}'
'00000110'

12 votes

Le premier 0 signifie que 0th argument pour format . Après les deux points se trouve le formatage, le deuxième 0 signifie remplissage zéro à 8 espaces et b pour les binaires

1 votes

@Aif : Jetez également un coup d'œil à la documentation standard docs.python.org/library/

28 votes

Cela peut être simplifié avec le format() fonction : format(6, '08b') ; la fonction prend une valeur (ce que le {..} s'applique) et une spécification de formatage (ce que vous mettrez après l'élément : dans la chaîne de formatage).

125voto

mshsayem Points 5271

Une autre idée :

>>> bin(6)[2:].zfill(8)
'00000110'

Chemin plus court via interpolation de chaînes de caractères ( Python 3.6 et plus ) :

>>> f'{6:08b}'
'00000110'

8 votes

Notez que cette solution est plus rapide que celui accepté . La solution la plus claire (ou, si j'ose dire, la plus pythique) est probablement une question de goût personnel.

0 votes

Je suis encore en train d'apprendre l'essence de la pythonicité, mais celle-ci est clairement beaucoup plus polyvalente. J'étais initialement excité de voir la solution acceptée avec son explication élégante, mais alarmé par le fait que l'objet appelé pour exécuter les méthodes était écrit comme une chaîne unique avec toutes les spécifications intégrées, éliminant l'implication des variables dans des choses telles que la longueur désirée de la chaîne de bits. Cette solution résout complètement ce problème et est si intuitive (du moins pour Python 2) qu'il n'est pas nécessaire d'expliquer chaque caractère !

0 votes

Ne fonctionne pas pour les nombres entiers négatifs bin(-6)[2:].zfill(8) se lit comme suit '0000b110'

26voto

sobel Points 343

Un peu de méthode de bricolage...

>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'
>>> bin8(-3)
'11111101'

1 votes

Belle méthode. Mais je n'arrive pas à comprendre ce que fait cette partie de votre code : str((x >> i) & 1)

2 votes

@Gregory : ça déplace les bits en x à droite et l'associe par ET à 1 en extrayant effectivement un bit (0 ou 1) à la fois.

11voto

jedwards Points 7769

La réponse d'eumiro est meilleure, mais je la poste juste pour varier :

>>> "%08d" % int(bin(6)[2:])
00000110

3 votes

Heh. C'est tellement faux que j'ai dû le voter. Interpréter les chiffres comme des décimales est astucieux. Encore pire : '%08x' % int(bin(6)[2:], 16)

6voto

thebjorn Points 3878

Ou si vous n'êtes pas sûr qu'il doit toujours être à 8 chiffres, vous pouvez le passer en paramètre :

>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X