Aquí podría ser tu PUBLICIDAD


¿Cómo se expresan literales binarios en Python?

votos
303

¿Cómo se expresa un número entero como un número binario con literales de Python?

Pude encontrar fácilmente la respuesta para el hex:

>>> 0x12AF
4783
>>> 0x100
256

y octal:

>>> 01267
695
>>> 0100
64

¿Cómo se usan los literales para expresar binario en Python?


Resumen de respuestas

  • Python 2.5 y anterior: puede expresar el uso binario int('01010101111',2)pero no con un literal.
  • Python 2.5 y versiones anteriores: no hay forma de expresar literales binarios.
  • Python 2.6 beta: puede hacer eso así: 0b1100111o 0B1100111.
  • Python 2.6 beta: también permitirá 0o27o 0O27(el segundo carácter es la letra O) para representar un octal.
  • Python 3.0 beta: lo mismo que 2.6, pero ya no permitirá la 027sintaxis anterior para octals.
Publicado el 04/08/2008 a las 19:20
fuente por usuario Justin Standard
En otros idiomas...        العربية       

6 respuestas

votos
241

Para referencia, futuras posibilidades de Python:
comenzando con Python 2.6 puedes expresar literales binarios usando el prefijo 0b o 0B :

>>> 0b101111
47

También puede usar la nueva función bin para obtener la representación binaria de un número:

>>> bin(173)
'0b10101101'

Versión de desarrollo de la documentación: Novedades en Python 2.6

Respondida el 16/08/2008 a las 01:35
fuente por usuario Andreas Thomas


Aquí podría ser tu PUBLICIDAD


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

De otra manera.

Respondida el 04/08/2008 a las 07:34
fuente por usuario Louis Brandy

votos
11

¿Cómo expresar literales binarios en Python?

No son literales "binario", sino más bien, "literales enteros". Usted puede expresar literales enteros con un formato binario con un 0seguido de una Bo bseguido por una serie de ceros y unos, por ejemplo:

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

A partir de los Python 3 docs , éstas son las formas de proporcionar literales enteros en Python:

literales enteros se describen por 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 literales enteros aparte de lo que se pueden almacenar en la memoria disponible.

Tenga en cuenta que los ceros 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 utiliza 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: Underscores están ahora autorizados para definir los grupos en los literales.

Otras formas de expresar binaria:

Usted puede tener los ceros y unos en un objeto de cadena que puede ser manipulado (aunque probablemente debería simplemente hacer operaciones bit a bit en el número entero en la mayoría de los casos) - sólo tiene que pasar int la cadena de ceros y unos y la base que va a convertir a partir de (2 ):

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

Usted puede tener opcionalmente el 0bo 0Bprefijo:

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

Si se le pasa 0como la base, que asumirá la base 10 si la cadena no especifica con un prefijo:

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

La conversión de int nuevo 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 puede combinar biny intpara ir de ida y vuelta:

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

Se puede utilizar una especificación de formato, así, si usted quiere tener la anchura mínima con ceros a la izquierda:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Respondida el 14/05/2016 a las 08:58
fuente por usuario Aaron Hall

votos
1

0 en el inicio aquí especifica que la base es 8 (no 10), que es bastante fácil de ver:

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

Si no se empieza con un 0, entonces Python asume que el número es de base 10.

>>> int('10101', 0)
10101
Respondida el 21/06/2016 a las 07:48
fuente por usuario Mehmet Ugurbil

votos
-1

Estoy bastante seguro de que esta es una de las cosas que debe cambiar en Python 3.0 con quizás bin () para ir con hex () y oct ().

EDITAR: la respuesta de lbrandy es correcta en todos los casos.

Respondida el 04/08/2008 a las 07:27
fuente por usuario sparkes

votos
-1

Hasta donde puedo decir Python, hasta 2.5, solo admite literales hexadecimales y octales. Encontré algunas discusiones sobre cómo agregar binarios a futuras versiones, pero nada definitivo.

Respondida el 04/08/2008 a las 07:26
fuente por usuario Mark Biek