Como você expressa literais binários em Python?
Pergunta
Como você expressa um número inteiro como um número binário com literais Python?
Consegui encontrar facilmente a resposta para hexadecimal:
>>> 0x12AF
4783
>>> 0x100
256
e octal:
>>> 01267
695
>>> 0100
64
Como você usa literais para expressar binário em Python?
Resumo das respostas
- Python 2.5 e anteriores:pode expressar binário usando
int('01010101111',2)
mas não com um literal. - Python 2.5 e anteriores:há sem chance para expressar literais binários.
- Python 2.6 beta:Você pode fazer assim:
0b1100111
ou0B1100111
. - Python 2.6 beta:também permitirá
0o27
ou0O27
(o segundo caractere é a letra O) para representar um octal. - Python 3.0 beta:Igual ao 2.6, mas não permitirá mais os mais antigos
027
sintaxe para octais.
Solução
Para referência-futuro Possibilidades de Python:
A partir do Python 2.6 você pode expressar literais binários usando o prefixo 0b ou 0B:
>>> 0b101111
47
Você também pode usar o novo caixa função para obter a representação binária de um número:
>>> bin(173)
'0b10101101'
Versão de desenvolvimento da documentação: O que há de novo no Python 2.6
Outras dicas
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
Outra maneira.
Como você expressa literais binários em Python?
Eles não são literais "binários", mas sim "literais inteiros".Você pode expressar literais inteiros com um formato binário com um 0
seguido por um B
ou b
seguido por uma série de zeros e uns, por exemplo:
>>> 0b0010101010
170
>>> 0B010101
21
Do Python 3 documentos, estas são as maneiras de fornecer literais inteiros em Python:
Literais inteiros são descritos pelas seguintes definições lexicais:
integer ::= decinteger | bininteger | octinteger | hexinteger decinteger ::= nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")* bininteger ::= "0" ("b" | "B") (["_"] bindigit)+ octinteger ::= "0" ("o" | "O") (["_"] octdigit)+ hexinteger ::= "0" ("x" | "X") (["_"] hexdigit)+ nonzerodigit ::= "1"..."9" digit ::= "0"..."9" bindigit ::= "0" | "1" octdigit ::= "0"..."7" hexdigit ::= digit | "a"..."f" | "A"..."F"
Não há limite para o comprimento dos literais inteiros, além do que pode ser armazenado na memória disponível.
Observe que não são permitidos zeros à esquerda em um número decimal diferente de zero.Isto é para desambiguação com literais octais no estilo C, que o Python usou antes da versão 3.0.
Alguns exemplos de literais inteiros:
7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0xdeadbeef 100_000_000_000 0b_1110_0101
Alterado na versão 3.6: Sublinhados agora são permitidos para fins de agrupamento em literais.
Outras maneiras de expressar binário:
Você pode ter zeros e uns em um objeto string que pode ser manipulado (embora você provavelmente deva apenas fazer operações bit a bit no número inteiro na maioria dos casos) - basta passar int a string de zeros e uns e a base da qual você está convertendo (2 ):
>>> int('010101', 2)
21
Você pode opcionalmente ter o 0b
ou 0B
prefixo:
>>> int('0b0010101010', 2)
170
Se você passar 0
como base, assumirá a base 10 se a string não especificar com um prefixo:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Convertendo de int de volta para binário legível por humanos:
Você pode passar um número inteiro para bin para ver a representação de string de um literal binário:
>>> bin(21)
'0b10101'
E você pode combinar bin
e int
ir e voltar:
>>> bin(int('010101', 2))
'0b10101'
Você também pode usar uma especificação de formato, se quiser ter largura mínima com zeros anteriores:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
0 no início aqui especifica que a base é 8 (não 10), o que é bem fácil de ver:
>>> int('010101', 0)
4161
Se você não começar com 0, o python assumirá que o número é de base 10.
>>> int('10101', 0)
10101
Pelo que eu sei, o Python, até 2.5, suporta apenas literais hexadecimais e octais.Encontrei algumas discussões sobre a adição de binários a versões futuras, mas nada definitivo.
Tenho certeza de que esta é uma das coisas devido à mudança no Python 3.0, talvez com bin() para combinar com hex() e oct().
EDITAR:A resposta de Brandy está correta em todos os casos.