Isso pode ser simplificado com a format()função : format(6, '08b'); a função assume um valor (ao qual o {..}slot se aplica) e uma especificação de formatação (o que você colocaria depois da :string de formatação).
Martijn Pieters
4
'{0:08b}'.format(-6)-> '-0000110'. e se você não quiser um sinal? struct? -6%256?
n611x007
1
@ AK47 Sim, desde que Pythoon 2.6 você pode escrever constantes de int em formato binário com 0b ou 0B prefixo: 0b00000110
Observe que esta solução é mais rápida que a aceita . Qual solução é mais clara (ou, devo dizer, Pythonic) é provavelmente uma questão de gosto pessoal.
ar
Ainda estou aprendendo a essência da pitonicidade, mas isso é claramente muito mais versátil. Inicialmente, fiquei empolgado ao ver a solução aceita com sua explicação elegante, mas fiquei alarmado que o objeto que estava sendo chamado para fazer os métodos fosse escrito como uma única sequência com todas as especificações incorporadas, eliminando o envolvimento de variáveis em coisas como o comprimento desejado da cadeia de bits. Isso resolve isso completamente e é tão intuitivo (pelo menos para o Python 2) que não há necessidade de explicar cada caractere!
Post169
Não funciona para números inteiros negativos, bin(-6)[2:].zfill(8)lê-se como'0000b110'
jlandercy
20
Um método um pouco distorcido ...
>>> bin8 =lambda x :''.join(reversed([str((x >> i)&1)for i in range(8)]))>>> bin8(6)'00000110'>>> bin8(-3)'11111101'
Embora esse código possa responder à pergunta, fornecer um contexto adicional sobre como e / ou por que resolve o problema melhoraria o valor a longo prazo da resposta.
precisa saber é o seguinte
0
Supondo que você queira analisar o número de dígitos usados para representar a partir de uma variável que nem sempre é constante, uma boa maneira será usar numpy.binary.
pode ser útil quando você aplica binário a conjuntos de potência
Respostas:
Apenas para explicar as partes da string de formatação:
{}
coloca uma variável em uma string0
pega a variável na posição de argumento 0:
adiciona opções de formatação para essa variável (caso contrário, isso representaria decimal6
)08
formata o número para oito dígitos preenchidos com zero à esquerdab
converte o número em sua representação bináriaSe você estiver usando uma versão do Python 3.6 ou superior, também poderá usar as f-strings:
fonte
0
significa o0th
argumento paraformat
. Após o cólon é a formatação, os segundos0
meios de enchimento de zero a 8 e espaçosb
para binárioformat()
função :format(6, '08b')
; a função assume um valor (ao qual o{..}
slot se aplica) e uma especificação de formatação (o que você colocaria depois da:
string de formatação).'{0:08b}'.format(-6)
->'-0000110'
. e se você não quiser um sinal?struct
?-6%256
?Apenas outra ideia:
Maneira mais curta via interpolação de strings ( Python 3.6+ ):
fonte
bin(-6)[2:].zfill(8)
lê-se como'0000b110'
Um método um pouco distorcido ...
fonte
x
para a direita e usa ANDs1
, extraindo efetivamente um bit (0 ou 1) por vez.Basta usar a função de formatação
A forma geral é
fonte
1000000 loops, best of 3: 556 ns per loop
A resposta do eumiro é melhor, no entanto, estou apenas postando isso por variedade:
fonte
'%08x' % int(bin(6)[2:], 16)
.. ou se você não tiver certeza de que sempre deve ter 8 dígitos, passe-o como um parâmetro:
fonte
numpy.binary_repr(num, width=None)
tem um argumento de largura mágicaExemplos relevantes da documentação vinculada acima:
fonte
Indo Old School sempre funciona
fonte
number=number/2
dá float, assimnumber=number//2
costuras melhores, também eu substituirianumber=number//2
comnumber//=2
eb=b+"0"
comb+="0"
ou
fonte
Supondo que você queira analisar o número de dígitos usados para representar a partir de uma variável que nem sempre é constante, uma boa maneira será usar numpy.binary.
pode ser útil quando você aplica binário a conjuntos de potência
fonte
A melhor maneira é especificar o formato.
retorna o valor binário de a no formato string.
Para converter uma string binária de volta em número inteiro, use a função int ().
retorna o valor inteiro da cadeia binária.
fonte
fonte