Le premier 0signifie l' 0thargument de format. Après le deux-points est le formatage, le second 0signifie zéro remplissage à 8 espaces et bpour binaire
Cela peut être simplifiée avec la format()fonction : format(6, '08b'); la fonction prend une valeur (à quoi {..}s'applique le slot) et une spécification de formatage (tout ce que vous mettriez après le :dans la chaîne de formatage).
Martijn Pieters
4
'{0:08b}'.format(-6)-> '-0000110'. et si vous ne voulez pas de signe? struct? -6%256?
n611x007
1
@ AK47 Oui, depuis Pythoon 2.6 vous pouvez écrire des constantes int sous forme binaire avec le préfixe 0b ou 0B: 0b00000110
Notez que cette solution est plus rapide que celle acceptée . Quelle solution est la plus claire (ou, oserais-je le dire, Pythonique) est probablement une question de goût personnel.
Air le
J'apprends toujours l'essence de la pythonicité, mais c'est clairement beaucoup plus polyvalent. J'étais initialement ravi de voir la solution acceptée avec son explication élégante, mais alarmé par le fait que l'objet appelé à faire les méthodes était écrit comme une seule chaîne avec toutes les spécifications intégrées, éliminant ainsi l'implication de variables dans des choses telles que la longueur souhaitée. de la chaîne de bits. Cela résout cela complètement et est si intuitif (au moins pour Python 2) qu'il n'est pas nécessaire d'expliquer chaque caractère!
Post169
Ne fonctionne pas pour un entier négatif se bin(-6)[2:].zfill(8)lit comme suit'0000b110'
jlandercy
20
Une méthode un peu bidouilleuse ...
>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'>>> bin8(-3)
'11111101'
Il h. C'est tellement faux, j'ai dû voter pour. Interpréter les chiffres comme des nombres décimaux est astucieux. Pire encore:'%08x' % int(bin(6)[2:], 16)
Mad Physicist
6
.. ou si vous n'êtes pas sûr qu'il doit toujours comporter 8 chiffres, vous pouvez le passer en paramètre:
number=number/2donne du flotteur, donc des number=number//2coutures meilleures, aussi je remplacerais number=number//2par number//=2et b=b+"0"parb+="0"
Brambor
De plus, vous n'avez pas le rembourrage 0 comme OP requis
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
Nic3500
1
En supposant que vous souhaitiez analyser le nombre de chiffres utilisés pour représenter à partir d'une variable qui n'est pas toujours constante, un bon moyen sera d'utiliser numpy.binary.
peut être utile lorsque vous appliquez des binaires à des ensembles de puissance
Réponses:
>>> '{0:08b}'.format(6) '00000110'
Juste pour expliquer les parties de la chaîne de formatage:
{}
place une variable dans une chaîne0
prend la variable à la position 0 de l'argument:
ajoute des options de mise en forme pour cette variable (sinon elle représenterait décimal6
)08
met en forme le nombre à huit chiffres remplis de zéros à gaucheb
convertit le nombre en sa représentation binaireSi vous utilisez une version de Python 3.6 ou supérieure, vous pouvez également utiliser des chaînes f:
>>> f'{6:08b}' '00000110'
la source
0
signifie l'0th
argument deformat
. Après le deux-points est le formatage, le second0
signifie zéro remplissage à 8 espaces etb
pour binaireformat()
fonction :format(6, '08b')
; la fonction prend une valeur (à quoi{..}
s'applique le slot) et une spécification de formatage (tout ce que vous mettriez après le:
dans la chaîne de formatage).'{0:08b}'.format(-6)
->'-0000110'
. et si vous ne voulez pas de signe?struct
?-6%256
?Juste une autre idée:
>>> bin(6)[2:].zfill(8) '00000110'
Chemin plus court via l' interpolation de chaîne ( Python 3.6+ ):
>>> f'{6:08b}' '00000110'
la source
bin(-6)[2:].zfill(8)
lit comme suit'0000b110'
Une méthode un peu bidouilleuse ...
>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) ) >>> bin8(6) '00000110' >>> bin8(-3) '11111101'
la source
x
vers la droite et les ET avec1
, en extrayant effectivement un bit (0 ou 1) à la fois.Utilisez simplement la fonction de format
format(6, "08b")
La forme générale est
format(<the_integer>, "<0><width_of_string><format_specifier>")
la source
1000000 loops, best of 3: 556 ns per loop
La réponse d'eumiro est meilleure, mais je poste juste ceci pour la variété:
>>> "%08d" % int(bin(6)[2:]) 00000110
la source
'%08x' % int(bin(6)[2:], 16)
.. ou si vous n'êtes pas sûr qu'il doit toujours comporter 8 chiffres, vous pouvez le passer en paramètre:
>>> '%0*d' % (8, int(bin(6)[2:])) '00000110'
la source
Going Old School fonctionne toujours
def intoBinary(number): binarynumber="" if (number!=0): while (number>=1): if (number %2==0): binarynumber=binarynumber+"0" number=number/2 else: binarynumber=binarynumber+"1" number=(number-1)/2 else: binarynumber="0" return "".join(reversed(binarynumber))
la source
number=number/2
donne du flotteur, donc desnumber=number//2
coutures meilleures, aussi je remplaceraisnumber=number//2
parnumber//=2
etb=b+"0"
parb+="0"
numpy.binary_repr(num, width=None)
a un argument de largeur magiqueExemples pertinents tirés de la documentation liée ci-dessus:
la source
('0' * 7 + bin(6)[2:])[-8:]
ou
right_side = bin(6)[2:] '0' * ( 8 - len( right_side )) + right_side
la source
En supposant que vous souhaitiez analyser le nombre de chiffres utilisés pour représenter à partir d'une variable qui n'est pas toujours constante, un bon moyen sera d'utiliser numpy.binary.
peut être utile lorsque vous appliquez des binaires à des ensembles de puissance
import numpy as np np.binary_repr(6, width=8)
la source
encore plus simple
my_num = 6 print(f'{my_num:b}')
la source
Le meilleur moyen est de spécifier le format.
format(a, 'b')
renvoie la valeur binaire de a au format chaîne.
Pour reconvertir une chaîne binaire en entier, utilisez la fonction int ().
int('110', 2)
renvoie la valeur entière de la chaîne binaire.
la source
def int_to_bin(num, fill): bin_result = '' def int_to_binary(number): nonlocal bin_result if number > 1: int_to_binary(number // 2) bin_result = bin_result + str(number % 2) int_to_binary(num) return bin_result.zfill(fill)
la source
Vous pouvez utiliser uniquement:
"{0:b}".format(n)
À mon avis, c'est le moyen le plus simple!
la source