El primero 0significa el 0thargumento de format. Después de los dos puntos es el formato, el segundo 0significa relleno de cero a 8 espacios y bpara binario
Esto se puede simplificar con la format()función : format(6, '08b'); la función toma un valor (a lo que se {..}aplica el espacio) y una especificación de formato (lo que sea que coloque después :de la cadena de formato).
Martijn Pieters
44
'{0:08b}'.format(-6)-> '-0000110'. ¿Qué pasa si no quieres una señal? struct? -6%256?
n611x007
1
@ AK47 Sí, desde Pythoon 2.6 puede escribir constantes int en forma binaria con el prefijo 0b o 0B: 0b00000110
Tenga en cuenta que esta solución es más rápida que la aceptada . La solución más clara (o, me atrevo a decir, Pythonic) es probablemente una cuestión de gusto personal.
Aire
Todavía estoy aprendiendo la esencia de la pitonicidad, pero esto es claramente mucho más versátil. Inicialmente, me entusiasmó ver la solución aceptada con su elegante explicación, pero me alarmó que el objeto que se llamaba para hacer los métodos se escribiera como una sola cadena con todas las especificaciones integradas, eliminando la participación de variables en cosas como la longitud deseada de la cadena de bits. ¡Esto lo resuelve completamente y es tan intuitivo (al menos para Python 2) que no hay necesidad de explicar cada personaje!
Post169
No funciona para enteros negativos que se bin(-6)[2:].zfill(8)lee como'0000b110'
jlandercy
20
Un poco de método de giro ...
>>> bin8 =lambda x :''.join(reversed([str((x >> i)&1)for i in range(8)]))>>> bin8(6)'00000110'>>> bin8(-3)'11111101'
Si bien este código puede responder la pregunta, proporcionar un contexto adicional con respecto a cómo y / o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta.
Nic3500
0
Suponiendo que desea analizar el número de dígitos utilizados para representar a partir de una variable que no siempre es constante, una buena manera será usar numpy.binary.
podría ser útil cuando aplica binario a conjuntos de potencia
Respuestas:
Solo para explicar las partes de la cadena de formato:
{}
coloca una variable en una cadena0
toma la variable en la posición de argumento 0:
agrega opciones de formato para esta variable (de lo contrario, representaría decimal6
)08
formatea el número a ocho dígitos con relleno de cero a la izquierdab
convierte el número a su representación binariaSi está utilizando una versión de Python 3.6 o superior, también puede usar cadenas f:
fuente
0
significa el0th
argumento deformat
. Después de los dos puntos es el formato, el segundo0
significa relleno de cero a 8 espacios yb
para binarioformat()
función :format(6, '08b')
; la función toma un valor (a lo que se{..}
aplica el espacio) y una especificación de formato (lo que sea que coloque después:
de la cadena de formato).'{0:08b}'.format(-6)
->'-0000110'
. ¿Qué pasa si no quieres una señal?struct
?-6%256
?Solo otra idea:
Camino más corto a través de la interpolación de cadenas ( Python 3.6+ ):
fuente
bin(-6)[2:].zfill(8)
lee como'0000b110'
Un poco de método de giro ...
fuente
x
hacia la derecha y AND1
, extrayendo efectivamente un bit (0 o 1) a la vez.Solo usa la función de formato
La forma general es
fuente
1000000 loops, best of 3: 556 ns per loop
La respuesta de eumiro es mejor, sin embargo, solo estoy publicando esto para la variedad:
fuente
'%08x' % int(bin(6)[2:], 16)
.. o si no está seguro de que siempre debe tener 8 dígitos, puede pasarlo como parámetro:
fuente
numpy.binary_repr(num, width=None)
tiene un argumento de ancho mágicoEjemplos relevantes de la documentación vinculada anteriormente:
fuente
Ir a la vieja escuela siempre funciona
fuente
number=number/2
da flotación, por lo quenumber=number//2
parece mejor, también reemplazaríanumber=number//2
connumber//=2
yb=b+"0"
conb+="0"
o
fuente
Suponiendo que desea analizar el número de dígitos utilizados para representar a partir de una variable que no siempre es constante, una buena manera será usar numpy.binary.
podría ser útil cuando aplica binario a conjuntos de potencia
fuente
La mejor manera es especificar el formato.
devuelve el valor binario de a en formato de cadena.
Para convertir una cadena binaria a entero, use la función int ().
Devuelve el valor entero de una cadena binaria.
fuente
fuente