Como você expressa literais binários em Python?
como se expressa um inteiro como um número binário com literais Python?
Consegui encontrar facilmente a resposta para o hex.>>> 0x12AF
4783
>>> 0x100
256
e octal:
>>> 01267
695
>>> 0100
64
como você usa literais para expressar binários em Python?
Resumo das Respostas
- Python 2.5 e anterior: pode expressar binário usando
int('01010101111',2)
mas não com um literal. - Python 2.5 e anterior: não há nenhuma maneira de 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 carácter é a letra O) representar um octal. - Python 3.0 beta: igual a 2.6, mas não permitirá mais a sintaxe mais antiga
027
para octais.
6 answers
Para referência-futuro possibilidades em Python:
A começar pelo Python 2. 6, poderá expressar literais binários usando o prefixo 0b ou 0B:
>>> 0b101111
47
Você também pode usar a nova função bin 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 em Python 2.6
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
Outra maneira.
Como se expressa literais binários em Python?
Eles não são literais" binários", mas sim,"literais inteiros". Você pode expressar inteiros literais 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
A partir do Python 3 docs , estas são as formas de fornecer literais inteiros em Python:
Os literais inteiros são descritos pela seguinte lexical definições:
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 para além do que pode ser armazenado na memória disponível.
Note que os zeros iniciais num número decimal não nulo não são permitidos. Isto é para desambiguação com literais octais estilo C, que Python usado 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: literais.
Outras formas de expressar binário:
Você pode ter os zeros e uns num objecto de texto que pode ser manipulado ( embora você provavelmente deva apenas fazer operações bit-wise no inteiro na maioria dos casos) - basta passar a cadeia de zeros e uns e a base de que está a converter (2):
>>> int('010101', 2)
21
Pode opcionalmente ter o 0b
ou 0B
prefixo:
>>> int('0b0010101010', 2)
170
Se o passares 0
como base, ele irá assumir a base 10 se a cadeia de caracteres não passar indique com um prefixo:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
A converter de int para binário legível pelo homem:
Você pode passar um inteiro para o bin para ver a representação em cadeia de um literal binário:
>>> bin(21)
'0b10101'
E você pode combinar bin
e int
para ir e voltar:
>>> bin(int('010101', 2))
'0b10101'
Também pode usar uma especificação de formato, se quiser ter uma 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 é muito fácil de ver:
>>> int('010101', 0)
4161
Se não começar com um 0, então o python assume que o número é a base 10.
>>> int('10101', 0)
10101
Tanto quanto posso dizer ao Python, até ao ponto 2.5, só suporta os literais hexadecimal & octal. Eu encontrei algumas discussões sobre adicionar binário para versões futuras, mas nada definitivo.
Tenho quase a certeza que esta é uma das coisas devido à mudança no Python 3.0 com talvez bin() para ir com hex() e oct().
Editar: a resposta do lbrandy está correcta em todos os casos.