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 ou 0B1100111.
  • Python 2.6 beta:também permitirá 0o27 ou 0O27 (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.
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top