Pregunta

¿Cómo expresar un número entero como un número binario con Python literales?

Yo era fácilmente capaz de encontrar la respuesta hex:

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

y octal:

>>> 01267
695
>>> 0100
64

¿Cómo usar los literales a expresar binario en Python?


Resumen de las Respuestas

  • Python 2.5 y versiones anteriores:puede expresar binario utilizando int('01010101111',2) pero no con un literal.
  • Python 2.5 y versiones anteriores:hay no hay manera para expresar binario literales.
  • Python 2.6 beta:Usted puede hacer así: 0b1100111 o 0B1100111.
  • Python 2.6 beta:también permitirá 0o27 o 0O27 (segundo carácter es la letra O) para representar un octal.
  • Python 3.0 beta:Mismo 2.6, pero ya no permitirá que los mayores 027 la sintaxis para octals.
¿Fue útil?

Solución

Para referenciafuturo Python posibilidades:
Empezando con Python 2.6 se puede expresar binario literales usando el prefijo 0b o 0B:

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

La versión de desarrollo de la documentación: ¿Qué hay de Nuevo en Python 2.6

Otros consejos

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

De otra manera.

¿Cómo expresar binario literales en Python?

No son "binario" literales, sino más bien, "los literales de tipo entero".Usted puede expresar los literales de tipo entero con un formato binario con un 0 seguido por un B o b seguido por una serie de ceros y unos, por ejemplo:

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

Desde el Python 3 docs, estas son las maneras de proporcionar a los literales de tipo entero en Python:

Los literales de tipo entero son descritos 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 los literales de tipo entero, aparte de lo que puede ser almacenado en la memoria disponible.

Tenga en cuenta que los ceros a la izquierda en un no-cero de número decimal no están permitidos.Esto es para la desambiguación con estilo C octal literales, que Python se utiliza antes de la versión 3.0.

Algunos ejemplos de los literales de tipo entero:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

Cambiado en la versión 3.6: Subraya están ahora autorizados para fines de agrupación en las literales.

Otras formas de expresar binario:

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

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

Usted puede tener la 0b o 0B prefijo:

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

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

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

La conversión de int volver a humanos binaria legible:

Usted puede pasar a un número entero de reciclaje para ver la representación de cadena de un binario literal:

>>> bin(21)
'0b10101'

Y se pueden combinar bin y int para ir hacia atrás y adelante:

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

Puede utilizar una especificación de formato así, si usted quiere tener un ancho mínimo anterior de ceros:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'

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

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

Si usted no comienza con un 0, entonces python supone que el número de base 10.

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

Como puedo decirle a Python, a 2.5, sólo admite hexadecimal & octal literales.Encontré algunos debates acerca de la adición de binario a futuras versiones, pero nada definitivo.

Estoy bastante seguro de que esta es una de las cosas debido al cambio en Python 3.0 con quizás bin() para ir con hex() y octubre().

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top