2010-08-20 6 views
88

C'è qualche modulo o funzione in python che posso usare per convertire un numero decimale nel suo equivalente binario? Sono in grado di convertire il binario in decimale usando int ('[valore_binario], 2), quindi un modo per fare il contrario senza scrivere il codice per farlo da solo?Converti decimale in binario in python

+9

Né "decimale" né "binario" significa ciò che pensate significhi. –

risposta

159

tutti i numeri sono memorizzati in binario. se si vuole una rappresentazione testuale di un dato numero in binario, utilizzare bin(i)

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

Ecco il formato per la stampa con zero iniziale: '" {0: 08b} ". Format (my_int)' –

5

Sono d'accordo con la risposta di @ aaronasterling. Tuttavia, se si desidera una stringa non binario che si può lanciare in un int, allora si può utilizzare l'algoritmo canonica:

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

'int (bin (10), 2)' yields '10'. 'int (decToBin (10))' produce '101' e' int (decToBin (10), 2) 'restituisce 5. Inoltre, i limiti di ricorsione della funzione hit con' da __future__ import division' o python 3 – aaronasterling

+3

@aaron, il quest'ultimo punto può essere risolto passando a '//' (divisione troncante); il primo, cambiando l'ordine delle due stringhe che vengono sommate nel 'return'. Non che la ricorsione abbia comunque senso qui ('bin (n) [2:]' - o un ciclo 'while' se sei bloccato su una vecchia versione di Python - sarà _much_ better!). –

+1

È fantastico! potrebbe andare anche con ** lambda **] 'binary = lambda n: '' se n == 0 altro binario (n/2) + str (n% 2)' –

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

E 'così facile.

+12

** - 1 ** - don ' t restituire un int. Inoltre, 'dec_to_bin (-1)' fornisce 'ValueError: letterale non valido per int() con base 10: 'b1'' – Eric

+1

puoi spiegarlo [2:]? –

+1

Prova 'bin (2)'. Non ottieni "10". Ottieni '0b10'. Stesso pozzo possibile con 'hex (2)' ('0x2'). Quindi vuoi tutti tranne i primi due personaggi. Quindi prendi una fetta che inizia dopo i primi due caratteri. – leewz

9

È anche possibile utilizzare una funzione dal modulo NumPy

from numpy import binary_repr 

che può anche gestire zeri:

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

Senza la 0b davanti:

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

A partire da Python 3.6 è anche possibile utilizzare formatted string literal or f-string, --- PEP:

f"{int:b}" 
+0

Ho ricevuto il seguente errore: 'TypeError: stringa di formato non vuota passata all'oggetto .__ format__' –

1

Per il bene di completamento: se si desidera convertire la rappresentazione punto fisso al suo equivalente binario è possibile eseguire le seguenti operazioni:

  1. ottenere l'intero e parte frazionaria.

    from decimal import * 
    a = Decimal(3.625) 
    a_split = (int(a//1),a%1) 
    
  2. Convertire la parte frazionale nella sua rappresentazione binaria. Per raggiungere questo obiettivo si moltiplicano successivamente da 2.

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

Potete leggere la spiegazione here.