2010-08-20 66 views
88

¿Hay algún módulo o función en python que pueda usar para convertir un número decimal en su equivalente binario? Soy capaz de convertir binario a decimal usando int ('[binary_value]', 2), entonces ¿hay alguna manera de hacer lo contrario sin escribir el código para hacerlo yo mismo?Convertir decimal a binario en python

+9

Ni "decimal" ni "binario" significa lo que usted piensa que significa. –

Respuesta

159

todos los números se almacenan en binario. si desea una representación textual de un número dado en binario, utilice bin(i)

>>> bin(10) 
'0b1010' 
>>> 0b1010 
10 
58
"{0:#b}".format(my_int) 
+27

Aquí está el formato para imprimir con ceros a la izquierda: '" {0: 08b} ". Format (my_int)' –

5

Estoy de acuerdo con la respuesta de @ aaronasterling. Sin embargo, si quieres una cadena no binaria que se puede echar en un int, entonces se puede utilizar el algoritmo canónica:

def decToBin(n): 
    if n==0: return '' 
    else: 
     return decToBin(n/2) + str(n%2) 
+0

'int (bin (10), 2)' produce '10'. 'int (decToBin (10))' produce '101' y' int (decToBin (10), 2) 'produce 5. Además, su función acierta los límites de recursión con' from __future__ import division' o python 3 – aaronasterling

+3

@aaron, the este último punto se puede resolver cambiando a '//' (división truncada); el primero, al cambiar el orden de las dos cadenas que se suman en el 'retorno'. No es que la recursividad tenga sentido aquí de todos modos ('bin (n) [2:]' - o un bucle 'while' si estás atrapado en alguna versión anterior de Python - ¡será muchísimo mejor!). –

+1

¡Esto es asombroso! también podría ir con ** lambda **:] 'binary = lambda n: '' si n == 0 else binario (n/2) + str (n% 2)' –

20
def dec_to_bin(x): 
    return int(bin(x)[2:]) 

Es así de fácil.

+12

** - 1 ** - don ' t devolver un int. Además, 'dec_to_bin (-1)' da 'ValueError: literal inválido para int() con base 10: 'b1'' – Eric

+1

¿Puedes explicar eso [2:]? –

+1

Pruebe 'bin (2)'. Usted no obtiene '10'. Obtienes '0b10'. El mismo pozo posible con 'hex (2)' ('0x2'). Entonces quieres todos menos los primeros dos personajes. Entonces tomas una porción que comienza después de los dos primeros caracteres. – leewz

9

También puede utilizar una función del módulo numpy

from numpy import binary_repr 

que también puede manejar los ceros iniciales:

Definition:  binary_repr(num, width=None) 
Docstring: 
    Return the binary representation of the input number as a string. 

    This is equivalent to using base_repr with base 2, but about 25x 
    faster. 

    For negative numbers, if width is not given, a - sign is added to the 
    front. If width is given, the two's complement of the number is 
    returned, with respect to that width. 
2
n=int(input('please enter the no. in decimal format: ')) 
x=n 
k=[] 
while (n>0): 
    a=int(float(n%2)) 
    k.append(a) 
    n=(n-a)/2 
k.append(0) 
string="" 
for j in k[::-1]: 
    string=string+str(j) 
print('The binary no. for %d is %s'%(x, string)) 
32

Sin la 0b delante:

"{0:b}".format(int) 

Comenzando con Python 3.6 también puedes usar formatted string literal or f-string, --- PEP:

f"{int:b}" 
+0

Recibí el siguiente error: 'TypeError: string de formato no vacío pasado al objeto .__ format__' –

1

En aras de finalización: si desea convertir la representación de punto fijo a su equivalente binario se pueden realizar las siguientes operaciones:

  1. obtener el número entero y parte fraccional.

    from decimal import * 
    a = Decimal(3.625) 
    a_split = (int(a//1),a%1) 
    
  2. Convierta la parte fraccionaria en su representación binaria. Para lograr esto se multiplica sucesivamente por 2.

    fr = a_split[1] 
    str(int(fr*2)) + str(int(2*(fr*2)%1)) + ... 
    

Usted puede leer la explicación here.

Cuestiones relacionadas