tutorial lenguaje instalar descargar python

lenguaje - python tutorial



Python int a binario? (26)

¿Hay algún método Python enlatado para convertir un entero (o largo) en una cadena binaria en Python?

Hay una gran cantidad de funciones dec2bin () en Google ... Pero esperaba poder usar una función / biblioteca incorporada.


Para calcular binarios de números:

print("Binary is {0:>08b}".format(16))

Para calcular el decimal Hexa de un número :

print("Hexa Decimal is {0:>0x}".format(15))

Para calcular todo el binario no hasta el 16 ::

for i in range(17): print("{0:>2}: binary is {0:>08b}".format(i))

Para calcular Hexa decimal no hasta 17

for i in range(17): print("{0:>2}: Hexa Decimal is {0:>0x}".format(i)) ##as 2 digit is enogh for hexa decimal representation of a number


A lo largo de una línea similar a la respuesta de Yusuf Yazici

def intToBin(n): if(n < 0): print "Sorry, invalid input." elif(n == 0): print n else: result = "" while(n != 0): result += str(n%2) n /= 2 print result[::-1]

Lo ajusté para que la única variable que se está mutando sea el resultado (y n, por supuesto).

Si necesita usar esta función en otro lugar (es decir, tener el resultado usado por otro módulo), considere el siguiente ajuste:

def intToBin(n): if(n < 0): return -1 elif(n == 0): return str(n) else: result = "" while(n != 0): result += str(n%2) n /= 2 return result[::-1]

Entonces -1 será su valor de centinela que indica que la conversión falló. (Esto es asumiendo que usted está convirtiendo SOLAMENTE números positivos, ya sean enteros o largos).


A menos que entienda mal lo que quiere decir con cadena binaria, creo que el módulo que está buscando es struct


Aquí está el código que acabo de implementar. ¡Este no es un método, pero puede usarlo como una función lista para usar !

def dectobin(number): bin = '''' while (number >= 1): number, rem = divmod(number, 2) bin = bin + str(rem) return bin


Aquí está la solución simple utilizando la función divmod () que devuelve el recordatorio y el resultado de una división sin la fracción.

n=input() print(bin(n).replace("0b", ""))


Aquí hay otra manera de usar las matemáticas regulares, sin bucles, solo recursión. (El caso trivial 0 no devuelve nada).

def toBin(num): if num == 0: return "" return toBin(num//2) + str(num%2) print ([(toBin(i)) for i in range(10)]) ['''', ''1'', ''10'', ''11'', ''100'', ''101'', ''110'', ''111'', ''1000'', ''1001'']


Aquí hay un simple convertidor de binario a decimal que se repite continuamente.

t = 1 while t > 0: binaryNumber = input("Enter a binary No.") convertedNumber = int(binaryNumber, 2) print(convertedNumber) print("")


Calculadora con todas las funciones necesarias para DEC, BIN, HEX: (hecha y probada con Python 3.5)

Puede cambiar los números de prueba de entrada y obtener los convertidos.

# CONVERTER: DEC / BIN / HEX def dec2bin(d): # dec -> bin b = bin(d) return b def dec2hex(d): # dec -> hex h = hex(d) return h def bin2dec(b): # bin -> dec bin_numb="{0:b}".format(b) d = eval(bin_numb) return d,bin_numb def bin2hex(b): # bin -> hex h = hex(b) return h def hex2dec(h): # hex -> dec d = int(h) return d def hex2bin(h): # hex -> bin b = bin(h) return b ## TESTING NUMBERS numb_dec = 99 numb_bin = 0b0111 numb_hex = 0xFF ## CALCULATIONS res_dec2bin = dec2bin(numb_dec) res_dec2hex = dec2hex(numb_dec) res_bin2dec,bin_numb = bin2dec(numb_bin) res_bin2hex = bin2hex(numb_bin) res_hex2dec = hex2dec(numb_hex) res_hex2bin = hex2bin(numb_hex) ## PRINTING print(''------- DECIMAL to BIN / HEX -------/n'') print(''decimal:'',numb_dec,''/nbin: '',res_dec2bin,''/nhex: '',res_dec2hex,''/n'') print(''------- BINARY to DEC / HEX -------/n'') print(''binary: '',bin_numb,''/ndec: '',numb_bin,''/nhex: '',res_bin2hex,''/n'') print(''----- HEXADECIMAL to BIN / HEX -----/n'') print(''hexadec:'',hex(numb_hex),''/nbin: '',res_hex2bin,''/ndec: '',res_hex2dec,''/n'')


Como una referencia:

def toBinary(n): return ''''.join(str(1 & int(n) >> i) for i in range(64)[::-1])

Esta función puede convertir un entero positivo tan grande como 18446744073709551615 , representado como la cadena ''1111111111111111111111111111111111111111111111111111111111111111'' .

Puede modificarse para que sirva a un entero mucho más grande, aunque puede que no sea tan práctico como "{0:b}".format() o bin() .



Encontré un método que utiliza la operación de matriz para convertir decimal a binario.

import numpy as np E_mat = np.tile(E,[1,M]) M_order = pow(2,(M-1-np.array(range(M)))).T bindata = np.remainder(np.floor(E_mat /M_order).astype(np.int),2)

E es el ingreso de datos decimales, M son las órdenes binarias. bindata es la salida de datos binarios, que está en un formato de 1 por M matriz binaria.


Esto es para python 3 y mantiene los ceros iniciales.

print(format(0, ''08b''))


Otra solución más con otro algoritmo, mediante el uso de operadores bitwise.

def int2bin(val): res='''' while val>0: res += str(val&1) val=val>>1 # val=val/2 return res[::-1] # reverse the string

Una versión más rápida sin invertir la cadena.

def int2bin(val): res='''' while val>0: res = chr((val&1) + 0x30) + res val=val>>1 return res


Python realmente tiene algo ya incorporado para esto, la capacidad de realizar operaciones como ''{0:b}''.format(42) , que le dará el patrón de bits (en una cadena) para 42 , o 101010 .

Para una filosofía más general, ningún idioma o biblioteca le dará a su base de usuarios todo lo que desee. Si está trabajando en un entorno que no proporciona exactamente lo que necesita, debe recopilar fragmentos de código a medida que se desarrolla para asegurarse de que nunca tenga que escribir lo mismo dos veces. Tales como, por ejemplo:

def int_to_bin_string(i): if i == 0: return "0" s = '''' while i: if i & 1 == 1: s = "1" + s else: s = "0" + s i //= 2 return s

que construirá su cadena binaria basada en el valor decimal, asumiendo que Python no tenía la forma más fácil.

La idea general es usar código de (en orden de preferencia):

  • El idioma o las bibliotecas integradas.
  • Bibliotecas de terceros con licencias adecuadas.
  • tu propia colección
  • algo nuevo que necesita escribir (y guardar en su propia colección para más adelante).

Resumen de alternativas:

n=42 assert "-101010" == format(-n, ''b'') assert "-101010" == "{0:b}".format(-n) assert "-101010" == (lambda x: x >= 0 and str(bin(x))[2:] or "-" + str(bin(x))[3:])(-n) assert "0b101010" == bin(n) assert "101010" == bin(n)[2:] # But this won''t work for negative numbers.

Los colaboradores incluyen a John Fouhy , Tung Nguyen , mVChr , Martin Thoma . y Martijn Pieters.


Si desea una representación textual sin el prefijo 0b, puede usar esto:

get_bin = lambda x: format(x, ''b'') print(get_bin(3)) >>> ''11'' print(get_bin(-3)) >>> ''-11''

Cuando quieras una representación de n bits:

get_bin = lambda x, n: format(x, ''b'').zfill(n) >>> get_bin(12, 32) ''00000000000000000000000000001100'' >>> get_bin(-12, 32) ''-00000000000000000000000000001100''

Alternativamente, si prefieres tener una función:

def get_bin(x, n=0): """ Get the binary representation of x. Parameters ---------- x : int n : int Minimum number of digits. If x needs less digits in binary, the rest is filled with zeros. Returns ------- str """ return format(x, ''b'').zfill(n)


Si está buscando bin() como equivalente a hex() , se agregó en Python 2.6.

Ejemplo:

>>> bin(10) ''0b1010''


Si estás dispuesto a renunciar a Python "puro" pero ganar mucha potencia de fuego, hay un ejemplo de Sage :

sage: a = 15 sage: a.binary() ''1111''

Notarás que se devuelve como una cadena, así que para usarlo como un número, querrías hacer algo como

sage: eval(''0b''+b) 15


Solución algo similar

def to_bin(dec): flag = True bin_str = '''' while flag: remainder = dec % 2 quotient = dec / 2 if quotient == 0: flag = False bin_str += str(remainder) dec = quotient bin_str = bin_str[::-1] # reverse the string return bin_str


Una forma sencilla de hacerlo es utilizar el formato de cadena, consulte esta página .

>> "{0:b}".format(10) ''1010''

Y si quieres tener una longitud fija de la cadena binaria, puedes usar esto:

>> "{0:{fill}8b}".format(10, fill=''0'') ''00001010''

Si se requiere el complemento de dos, entonces se puede usar la siguiente línea:

''{0:{fill}{width}b}''.format((x + 2**n) % 2**n, fill=''0'', width=n)

donde n es el ancho de la cadena binaria.


Usando numpy pack / unpackbits, son tus mejores amigos.

def binary(decimal) : otherBase = "" while decimal != 0 : otherBase = str(decimal % 2) + otherBase decimal //= 2 return otherBase print binary(10)


puedes hacer asi

bin(10)[2:]

o:

f = str(bin(10)) c = [] c.append("".join(map(int, f[2:]))) print c


una sola línea con lambda :

>>> binary = lambda n: '''' if n==0 else binary(n/2) + str(n%2)

prueba:

>>> binary(5) ''101''



EDITAR :

pero entonces :(

t1 = time() for i in range(1000000): binary(i) t2 = time() print(t2 - t1) # 6.57236599922

en comparacion con

t1 = time() for i in range(1000000): ''{0:b}''.format(i) t2 = time() print(t2 - t1) # 0.68017411232


Examples -------- >>> a = np.array([[2], [7], [23]], dtype=np.uint8) >>> a array([[ 2], [ 7], [23]], dtype=uint8) >>> b = np.unpackbits(a, axis=1) >>> b array([[0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 1, 0, 1, 1, 1]], dtype=uint8)


def inttobinary(number): if number == 0: return str(0) result ="" while (number != 0): remainder = number%2 number = number/2 result += str(remainder) return result[::-1] # to invert the string

salida:

1010


try: while True: p = "" a = input() while a != 0: l = a % 2 b = a - l a = b / 2 p = str(l) + p print(p) except: print ("write 1 number")