Afin de convertir un entier en binaire, j'ai utilisé ce code:
>>> bin(6)
'0b110'
et quand effacer le '0b', j'utilise ceci:
>>> bin(6)[2:]
'110'
Que puis-je faire si je souhaite afficher 6
comme 00000110
au lieu de 110
?
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écimal 6
)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'
0
signifie l' 0th
argument de format
. Après le deux-points est le formatage, le second 0
signifie zéro remplissage à 8 espaces et b
pour binaire
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).
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'
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'
x
vers la droite et les ET avec 1
, en extrayant effectivement un bit (0 ou 1) à la fois.
La réponse d'eumiro est meilleure, mais je poste juste ceci pour la variété:
>>> "%08d" % int(bin(6)[2:])
00000110
'%08x' % int(bin(6)[2:], 16)
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))
number=number/2
donne du flotteur, donc des number=number//2
coutures meilleures, aussi je remplacerais number=number//2
par number//=2
et b=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:
>>> np.binary_repr(3, width=4) '0011'
Le complément à deux est renvoyé lorsque le nombre d'entrée est négatif et que la largeur est spécifiée:
>>> np.binary_repr(-3, width=5) '11101'
('0' * 7 + bin(6)[2:])[-8:]
ou
right_side = bin(6)[2:]
'0' * ( 8 - len( right_side )) + right_side
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)
encore plus simple
my_num = 6
print(f'{my_num:b}')
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.
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)