2010-08-20 11 views
88

में दशमलव को बाइनरी में कनवर्ट करें क्या कोई पाइपन में कोई मॉड्यूल या फ़ंक्शन है जिसका उपयोग मैं दशमलव संख्या को अपने बाइनरी समकक्ष में परिवर्तित करने के लिए कर सकता हूं? मैं int ('[binary_value]', 2) का उपयोग करके बाइनरी को दशमलव में परिवर्तित करने में सक्षम हूं, इसलिए कोड को लिखने के बिना रिवर्स करने का कोई तरीका है?पाइथन

+9

न तो "दशमलव" और न ही "बाइनरी" का अर्थ है जो आपको लगता है इसका मतलब है। –

उत्तर

159

सभी संख्या बाइनरी में संग्रहीत हैं। यदि आप बाइनरी में दी गई संख्या के एक शाब्दिक प्रतिनिधित्व चाहते हैं, का उपयोग bin(i)

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

यहां अग्रणी शून्य के साथ मुद्रण के लिए प्रारूप है: '" {0: 08b} "। प्रारूप (my_int)' –

5

मैं @ aaronasterling के जवाब के साथ सहमत हैं।

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

'int (बिन (10), 2) 'उपज' 10'। 'int (decToBin (10)) '' 101' और 'int (decToBin (10), 2) उपज 5. उपज 5. इसके अलावा, आपके फ़ंक्शन हिट की __future__ आयात डिवीजन' या पायथन 3 – aaronasterling

+3

@Aaron से हिट की रिकर्सन सीमाएं, बाद के बिंदु को '//' (ट्रंकेटिंग डिवीजन) पर स्विच करके हल किया जा सकता है; पूर्व, 'वापसी' में दो तारों के क्रम को स्विच करके। यह नहीं कि रिकर्सन किसी भी तरह से किसी भी तरह का अर्थ बनाता है ('बिन (एन) [2:]' - या 'जबकि' लूप अगर आप पाइथन के कुछ पुराने संस्करण पर फंस गए हैं - _much_ बेहतर होगा!)। –

+1

यह कमाल है! यह ** लैम्ब्डा ** के साथ भी जा सकता है:] 'बाइनरी = लैम्ब्डा एन: '' अगर एन == 0 अन्य बाइनरी (एन/2) + स्ट्र (एन% 2)' –

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

यह इतना आसान है: हालांकि, अगर आप एक गैर बाइनरी स्ट्रिंग है कि आप एक पूर्णांक में डाला जा सकता है चाहते हैं, तो आप विहित एल्गोरिथ्म का उपयोग कर सकते हैं।

+12

** - 1 ** - डॉन' एक int वापस नहीं। साथ ही, 'dec_to_bin (-1)' ValueError देता है: आधार 10 के साथ int() के लिए अवैध अक्षर: 'b1'' – Eric

+1

क्या आप समझा सकते हैं [2:]? –

+1

'बिन (2) 'आज़माएं। आपको '10' नहीं मिलता है। आपको '0 बी 10' मिलता है। 'हेक्स (2)' ('0x2') के साथ वही संभव गड्ढा। तो आप पहले दो पात्रों के अलावा सभी चाहते हैं। तो आप एक टुकड़ा लेते हैं जो पहले दो पात्रों के बाद शुरू होता है। – leewz

9

तुम भी numpy मॉड्यूल

from numpy import binary_repr 

जो भी संभाल कर सकते हैं से एक समारोह का उपयोग कर सकते अग्रणी शून्य:

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

0b बिना सामने:

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

पायथन 3.6 से शुरू करना आपका भी उपयोग कर सकते हैं, --- PEP:

f"{int:b}" 
+0

मुझे निम्न त्रुटि मिली: 'TypeError: ऑब्जेक्ट को पास न किए गए गैर-खाली प्रारूप स्ट्रिंग .__ प्रारूप__' –

1

पूरा होने की खातिर के लिए: आप अपनी दोहरी बराबर करने के लिए नियत बिन्दु प्रतिनिधित्व कन्वर्ट करने के लिए आप निम्न कार्य कर सकते हैं चाहते हैं:

  1. पूर्णांक प्राप्त करें और आंशिक हिस्सा।

    from decimal import * 
    a = Decimal(3.625) 
    a_split = (int(a//1),a%1) 
    
  2. अपने द्विआधारी प्रतिनिधित्व में आंशिक भाग को परिवर्तित करें। द्वारा 2.

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

गुणा क्रमिक इस लक्ष्य को पूरा आप स्पष्टीकरण here पढ़ सकते हैं।