numeros - rellenar con ceros a la izquierda python
Convierta a binario y mantenga los ceros a la izquierda en Python (8)
Estoy intentando convertir un entero en binario usando la función bin () en Python. Sin embargo, siempre elimina los ceros a la izquierda, que realmente necesito, de modo que el resultado siempre es de 8 bits:
Ejemplo:
bin(1) -> 0b1
# What I would like:
bin(1) -> 0b00000001
¿Hay alguna forma de hacer esto?
A veces solo quieres un simple trazador de líneas:
binary = ''''.join([''{0:08b}''.format(ord(x)) for x in input])
Python 3
Puede usar la secuencia de formato de mini idioma:
def binary(num, pre=''0b'', length=8, spacer=0):
return ''{0}{{:{1}>{2}}}''.format(pre, spacer, length).format(bin(num)[2:])
Manifestación:
print binary(1)
Salida:
''0b00000001''
EDIT: basado en la idea de @Martijn Pieters
def binary(num, length=8):
return format(num, ''#0{}b''.format(length + 2))
Puedes usar algo como esto
("{:0%db}"%length).format(num)
Puedes usar zfill:
print str(1).zfill(2)
print str(10).zfill(2)
print str(100).zfill(2)
huellas dactilares:
01
10
100
Me gusta esta solución, ya que ayuda no solo cuando se envía el número, sino cuando se necesita asignarlo a una variable ... ej. - x = str (datetime.date.today (). Month) .zfill (2) will devuelve x como ''02'' para el mes de febrero.
Use la función format()
:
>>> format(14, ''#010b'')
''0b00001110''
La función de format()
simplemente formatea la entrada siguiendo el mini idioma de especificación de formato . El #
hace que el formato incluya el prefijo 0b
, y el tamaño 010
formatea el resultado para que quepa en un ancho de 10 caracteres, con 0
relleno; 2 caracteres para el prefijo 0b
, los otros 8 para los dígitos binarios.
Esta es la opción más compacta y directa.
Si está colocando el resultado en una cadena más grande, use str.format()
y coloque el segundo argumento para la función format()
después de los dos puntos del marcador de posición {:..}
:
>>> ''The produced output, in binary, is: {:#010b}''.format(14)
''The produced output, in binary, is: 0b00001110''
Si no desea el prefijo 0b
, simplemente suelte el #
y ajuste la longitud del campo:
>>> format(14, ''08b'')
''00001110''
estoy usando
bin(1)[2:].zfill(8)
imprimirá
''00000001''
>>> ''{:08b}''.format(1)
''00000001''
Ver: Especificación de formato Mini-Idioma
Tenga en cuenta que para Python 2.6 o anterior, no puede omitir el identificador de argumento posicional antes, así que use
>>> ''{0:08b}''.format(1)
''00000001''
module Adder(
input upperBit, lowerBit, c_in,
output s, c_out)
write gate1, gate2, gate3
xor (gate1, upperBit, lowerBit)
xor (s, gate1, c_in)
and (upperBit, lowerBit)
and (gate1, c_in)
or (c_out, gate1, gate2)
endmodule
module ful_adder8(
input [7:0) a, b
input c_in
output [7:0) s,
output c_out)
write [7:0] carry
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
full_adder fa0(
a(a[o])
b(b[0])
c_in(c_in)
s(s[0])
c_out(carry[0]))
endmodule
test
def split (n):
return (n&0x1,n&0x2,n&0x4,n&0x8,n&0x10,n&0x20,n&0x40,n&0x80)
def glue (b0,b1,b2,b3,b4,b5,b6,b7,c):
t = 0
if b0:
t += 1
if b1:
t += 2
if b2:
t += 4
if b3:
t += 8
if b4:
t += 16
if b5:
t += 32
if b6:
t += 64
if b7:
t += 128
if c:
t += 256
return t
def myadd (a,b):
(a0,a1,a2,a3,a4,a5,a6,a7) = split(a)
(b0,b1,b2,b3,b4,b5,b6,b7) = split(b)
(s0,s1,s2,s3,s4,s5,s6,s7,c) = addEightBits(a0,a1,a2,a3,a4,a5,a6,a7,b0,b1,b2,b3,b4,b5,b6,b7,false)
return glue (s0,s1,s2,s3,s4,s5,s6,s7,c)