Como você expressa literais binários em Python?
Eles não são literais "binários", mas "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
Nos documentos do Python 3 , estas são as maneiras de fornecer literais inteiros no 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 de literais inteiros além do que pode ser armazenado na memória disponível.
Observe que zeros à esquerda em um número decimal diferente de zero não são permitidos. Isso ocorre por 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: Os 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 de string que pode ser manipulado (embora você provavelmente deva executar 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
Opcionalmente, você pode ter o prefixo 0b
ou 0B
:
>>> int('0b0010101010', 2)
170
Se você passar 0
como base, ele assumirá a base 10 se a sequência 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 em cadeia 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 desejar 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'