Como você expressa literais binários em Python?

votos
303

Como você expressa um inteiro como um número binário com literais Python?

I foi facilmente capaz de encontrar a resposta para hex:

>>> 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: não há nenhuma maneira de expressar literais binários.
  • Python 2.6 beta: Você pode fazer assim: 0b1100111ou 0B1100111.
  • Python 2.6 beta: também permitirá 0o27ou 0O27(segundo personagem é a letra O) para representar um octal.
  • Python 3.0 beta: O mesmo que 2.6, mas não vai mais permitir que os mais velhos 027sintaxe para octals.
Publicado 04/08/2008 em 19:20
fonte usuário
Em outras línguas...                            


6 respostas

votos
241

Para referência- futuro possibilidades Python:
Começando com Python 2.6 você pode expressar literais binários usando o prefixo 0b ou 0B :

>>> 0b101111
47

Você também pode usar o novo bin 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

Respondeu 16/08/2008 em 13:35
fonte usuário

votos
64
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Outra forma.

Respondeu 04/08/2008 em 19:34
fonte usuário

votos
11

Como você expressa literais binários em Python?

Eles não são literais "binários", mas sim, "literais inteiro". Você pode expressar literais inteiro com um formato binário com um 0seguido por um Bou bseguido por uma série de zeros e uns, por exemplo:

>>> 0b0010101010
170
>>> 0B010101
21

Dos Python 3 docs , estas são as maneiras de fornecer literais inteiros em Python:

literais inteiros são descritos pelos 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 de literais inteiros para além do que pode ser armazenado na memória disponível.

Note-se que zeros em um número decimal não-zero não são permitidos. Isto é para clarificação com literais octal de estilo C, que Python utilizados antes 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 são agora permitidas para fins de agrupamento em literais.

Outras formas de expressar binário:

Você pode ter os zeros e uns em um objeto string que pode ser manipulado (embora você provavelmente deve apenas fazer operações bit a bit sobre o inteiro na maioria dos casos) - apenas passar int a seqüência de zeros e uns e a base que você está convertendo a partir de (2 ):

>>> int('010101', 2)
21

Você pode, opcionalmente, ter o 0bou 0Bprefixo:

>>> int('0b0010101010', 2)
170

Se você passá-lo 0como a base, ele assumirá base 10 se a string não especifica com um prefixo:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

Conversão de int volta para binário legível:

Você pode passar um inteiro para bin para ver a representação de cadeia de um literal binário:

>>> bin(21)
'0b10101'

E você pode combinar bine intir para trás e para a frente:

>>> bin(int('010101', 2))
'0b10101'

Você pode usar uma especificação de formato, bem como, se você quer ter largura mínima com zeros precedentes:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Respondeu 14/05/2016 em 11:58
fonte usuário

votos
1

0 no início aqui especifica que a base é 8 (não 10), que é bastante fácil de ver:

>>> int('010101', 0)
4161

Se você não começar com um 0, então python assume o número é base 10.

>>> int('10101', 0)
10101
Respondeu 21/06/2016 em 22:48
fonte usuário

votos
-1

Tenho a certeza que esta é uma das coisas devido a alterações no Python 3.0 com talvez bin () para ir com hex () e outubro ().

EDIT: A resposta de lbrandy está correto em todos os casos.

Respondeu 04/08/2008 em 19:27
fonte usuário

votos
-1

Tanto quanto eu posso dizer Python, através de 2.5, suporta apenas hexadecimais e octais literais. Eu fiz encontrar algumas discussões sobre a adição de binário para as versões futuras, mas nada definitivo.

Respondeu 04/08/2008 em 19:26
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more