2010-08-20 16 views
88

Python'da ondalık sayıyı ikili eşdeğerine dönüştürmek için kullanabileceğim herhangi bir modül veya işlev var mı? İkil'i int ('[binary_value]', 2) kullanarak ondalık sayıya dönüştürebilirim, böylece kodu kendim yapmak için kod yazmadan tersi yapmanın herhangi bir yolu var mı?Python'da ondalık basamağa dönüştürme

+9

Ne "ondalık" ne de "ikili" ne düşündüğünüzü ifade eder. –

cevap

159

tüm sayılar ikili olarak kaydedilir. ikili belirli bir sayının metin biçimini isterseniz, ben @ aaronasterling en yanıta katılabilir bin(i)

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

Başa dön Sıfır ile yazdırma için format: '" {0: 08b} ". Format (my_int)' –

5

kullanın.

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

'int (bin (10), 2)' 10 'verir. int (decToBin (10)), "101" ve "int (decToBin (10), 2)" değerlerini verir. 5. Ayrıca, işlev isminizin “__future__ import division” veya python 3 – aaronasterling

+3

@ aaron ile yineleme limitleri son nokta, // // (kesilmiş bölüm) 'e geçerek çözülebilir; Birincisi, iki dizenin sırasını 'dönüş' olarak özetlenerek. Bu yineleme burada bir anlam ifade etmiyor ('bin (n) [2:]' - ya da bir '' '' '' '' '' '' '' Python’un eski bir sürümünde kalıyorsanız, daha iyi olacaktır! ''. –

+1

Bu harika! ** lambda ** yolu ile de gidebilirdi:] 'binary = lambda n: '' n == 0 başka ikili (n/2) + str (n% 2)' –

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

Çok kolay işte: Eğer int içine yayınlayabileceğim olmayan bir ikili dize istiyorsanız Ancak, o zaman kurallı algoritmayı kullanabilirsiniz.

+12

** - 1 ** - don' int dönüşü Ayrıca, dec_to_bin (-1) '' ValueError: base 10 ile int() için geçersiz değişkeni verir: 'b1' – Eric

+1

bunu [2:] açıklayabilir misiniz? –

+1

Bili (2) 'yi deneyin. '10' alamıyorsun. '0b10' olsun. Hex (2) '('0x2') ile aynı olası çukur. Yani ilk iki karakterin hepsini istiyorsun. Böylece ilk iki karakterden sonra başlayan bir dilim alırsınız. – leewz

9

Ayrıca da işleyebilir numpy modül

from numpy import binary_repr 

bir işlev kullanabilirsiniz başında sıfır: önünde 0b olmadan

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

:

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

Python 3.6 ile başlayarak 0123'ü de kullanabilirsiniz, --- PEP: tamamlanma uğruna

f"{int:b}" 
+0

Aşağıdaki hatayı aldım: 'TypeError: boş olmayan biçim dizesi object .__ format__'na iletildi –

1

: Eğer aşağıdaki işlemleri gerçekleştirebilirsiniz onun ikili eşdeğer sabit nokta gösterimi dönüştürmek istiyorsanız:

  1. tamsayı almak ve kesirli kısım.

    from decimal import * 
    a = Decimal(3.625) 
    a_split = (int(a//1),a%1) 
    
  2. onun ikili gösteriminde fraksiyonel bölümünü dönüştürün. 2.

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

ile çarpın arda Bunu başarmak için Sen açıklama here okuyabilirsiniz.

İlgili konular