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 ou 0B1100111.
  • Python 2. 6 beta: também permitirá 0o27 ou 0O27 (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.
Author: Jim Fasarakis Hilliard, 2008-08-04

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

 247
Author: Andreas Thomas, 2008-08-16 12:35:36
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255
Outra maneira.
 66
Author: Louis Brandy, 2012-01-22 17:47:30

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'
 14
Author: Aaron Hall, 2017-03-13 15:22:33

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
 1
Author: Mehmet Ugurbil, 2016-06-21 22:48:20

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.

 -1
Author: Mark Biek, 2008-08-04 18:26:13

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.

 -1
Author: sparkes, 2009-12-13 16:46:39