¿Cómo expresas literales binarios en Python?
No son literales "binarios", sino "literales enteros". Puede expresar literales enteros con un formato binario 0
seguido de B
ao b
seguido de una serie de ceros y unos, por ejemplo:
>>> 0b0010101010
170
>>> 0B010101
21
De los documentos de Python 3 , estas son las formas de proporcionar literales enteros en Python:
Los literales enteros se describen mediante las siguientes definiciones léxicas:
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"
No hay límite para la longitud de los literales enteros, aparte de lo que se puede almacenar en la memoria disponible.
Tenga en cuenta que los ceros iniciales en un número decimal distinto de cero no están permitidos. Esto es para la desambiguación con literales octales de estilo C, que Python utilizó antes de la versión 3.0.
Algunos ejemplos de literales enteros:
7 2147483647 0o177 0b100110111
3 79228162514264337593543950336 0o377 0xdeadbeef
100_000_000_000 0b_1110_0101
Cambiado en la versión 3.6: los guiones bajos ahora están permitidos para fines de agrupación en literales.
Otras formas de expresar binario:
Puede tener los ceros y unos en un objeto de cadena que puede manipularse (aunque probablemente debería hacer operaciones bit a bit en el entero en la mayoría de los casos): simplemente pase int la cadena de ceros y unos y la base desde la que está convirtiendo (2 ):
>>> int('010101', 2)
21
Opcionalmente, puede tener el prefijo 0b
o 0B
:
>>> int('0b0010101010', 2)
170
Si lo pasa 0
como base, asumirá la base 10 si la cadena no se especifica con un prefijo:
>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21
Convertir de int a binario legible por humanos:
Puede pasar un entero a bin para ver la representación de cadena de un literal binario:
>>> bin(21)
'0b10101'
Y puedes combinar bin
y int
para ir y venir:
>>> bin(int('010101', 2))
'0b10101'
También puede usar una especificación de formato, si desea tener un ancho mínimo con ceros anteriores:
>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'