अजगर में बाइनरी को पूर्णांक में परिवर्तित करना


179

किसी पूर्णांक को बाइनरी में बदलने के लिए, मैंने इस कोड का उपयोग किया है:

>>> bin(6)  
'0b110'

और '0b' को मिटाने के लिए, मैं इसका उपयोग करता हूं:

>>> bin(6)[2:]  
'110'

अगर मैं इसके बजाय 6जैसा दिखाना चाहता हूं, तो मैं क्या कर सकता हूं ?00000110110


जवाबों:


355
>>> '{0:08b}'.format(6)
'00000110'

बस स्वरूपण स्ट्रिंग के कुछ हिस्सों को समझाने के लिए:

  • {} एक चर में एक स्ट्रिंग जगह है
  • 0 तर्क स्थिति 0 पर चर लेता है
  • :इस चर के लिए स्वरूपण विकल्प जोड़ता है (अन्यथा यह दशमलव का प्रतिनिधित्व करेगा 6)
  • 08 बाईं ओर शून्य-गद्देदार आठ अंकों की संख्या प्रारूपित करता है
  • b संख्या को अपने बाइनरी प्रतिनिधित्व में परिवर्तित करता है

यदि आप Python 3.6 या इसके बाद के संस्करण का उपयोग कर रहे हैं, तो आप f-strings का भी उपयोग कर सकते हैं:

>>> f'{6:08b}'
'00000110'

7
पहले का 0अर्थ है 0thतर्क format। बृहदान्त्र के स्वरूपण के बाद, दूसरा 0स्थान शून्य से 8 स्थानों के लिए और bद्विआधारी के लिए
जमाइलाक

@ एआईएफ: इसके अलावा, मानक दस्तावेज docs.python.org/library/…
pepr

19
इस के साथ सरल किया जा सकता format() समारोह : format(6, '08b'); फ़ंक्शन एक मान लेता है ( {..}स्लॉट क्या लागू होता है) और एक प्रारूपण विनिर्देश (जो भी आप :स्वरूपण स्ट्रिंग में डालते हैं )।
मार्टिन पीटर्स

4
'{0:08b}'.format(-6)-> '-0000110'। क्या होगा यदि आप एक संकेत नहीं चाहते हैं? struct? -6%256?
n611x007

1
@ AK47 हां, पाइथून 2.6 के बाद से आप 0b या 0B उपसर्ग के साथ बाइनरी फॉर्म में इंट कॉन्स्टेंट लिख सकते हैं: 0b00000110
डेनिस बर्मेनकोव

102

बस एक और विचार:

>>> bin(6)[2:].zfill(8)
'00000110'

स्ट्रिंग इंटरपोलेशन ( पायथन 3.6+ ) के माध्यम से छोटा रास्ता :

>>> f'{6:08b}'
'00000110'

7
ध्यान दें कि यह समाधान स्वीकृत की तुलना में तेज है । कौन सा समाधान अधिक स्पष्ट है (या, मैं इसे कहने की हिम्मत करता हूं, पायथोनिक) शायद व्यक्तिगत स्वाद का मामला है।
एयर

मैं अभी भी pythonicity का सार सीख रहा हूं, लेकिन यह स्पष्ट रूप से अधिक बहुमुखी है। मैं इसकी सुरुचिपूर्ण व्याख्या के साथ स्वीकार किए गए समाधान को देखने के लिए शुरू में उत्साहित था, लेकिन इस बात से घबरा गया कि जिस तरीके को करने के लिए कॉल किया जा रहा है वह सभी विशिष्टताओं के साथ एकल स्ट्रिंग के रूप में लिखा गया था, जिसमें वांछित लंबाई के रूप में ऐसी चीजों में चर की भागीदारी को समाप्त कर दिया गया था। बिटस्ट्रिंग का। यह पूरी तरह से हल करता है, और इतना सहज (कम से कम पायथन 2 के लिए) है कि प्रत्येक चरित्र की व्याख्या करने की कोई आवश्यकता नहीं है!
पोस्ट 16

नकारात्मक पूर्णांक के लिए काम नहीं करता है bin(-6)[2:].zfill(8)के रूप में पढ़ता'0000b110'
jlandercy

20

थोड़ा सा चक्कर लगाने का तरीका ...

>>> bin8 = lambda x : ''.join(reversed( [str((x >> i) & 1) for i in range(8)] ) )
>>> bin8(6)
'00000110'
>>> bin8(-3)
'11111101'

1
अच्छी विधि है। लेकिन मैं समझ नहीं सका कि आपके कोड का यह हिस्सा क्या कर रहा है: str ((x >> i) & 1)
ग्रेगरी

2
@ समूह: यह बिट्स xको दाईं ओर शिफ्ट करता है और इसे 1एक समय में प्रभावी रूप से एक बिट (0 या 1) निकालता है।
usr2564301

16

बस प्रारूप फ़ंक्शन का उपयोग करें

format(6, "08b")

सामान्य रूप है

format(<the_integer>, "<0><width_of_string><format_specifier>")

1
हां, मुझे यह पसंद है, यह सरल है और सबसे तेज में से एक :-) 1000000 loops, best of 3: 556 ns per loop
सेबमा जूल

10

यूमिरो का जवाब बेहतर है, हालांकि मैं इसे विविधता के लिए पोस्ट कर रहा हूं:

>>> "%08d" % int(bin(6)[2:])
00000110

3
हे। यह सिर्फ इतना गहरा गलत है, मुझे इसे उखाड़ना पड़ा। दशमलव के रूप में अंकों की व्याख्या चालाक है। इससे भी बदतर:'%08x' % int(bin(6)[2:], 16)
मैड फिजिसिस्ट

6

.. या अगर आपको यकीन नहीं है कि यह हमेशा 8 अंक होना चाहिए, तो आप इसे एक पैरामीटर के रूप में पारित कर सकते हैं:

>>> '%0*d' % (8, int(bin(6)[2:]))
'00000110'

5

numpy.binary_repr(num, width=None) एक जादू चौड़ाई तर्क है

ऊपर दिए गए दस्तावेज़ से प्रासंगिक उदाहरण:

>>> np.binary_repr(3, width=4)
'0011'

इनपुट नंबर ऋणात्मक और चौड़ाई निर्दिष्ट होने पर दो का पूरक वापस आ जाता है:

>>> np.binary_repr(-3, width=5)
'11101'

4

गोइंग ओल्ड स्कूल हमेशा काम करता है

def intoBinary(number):
binarynumber=""
if (number!=0):
    while (number>=1):
        if (number %2==0):
            binarynumber=binarynumber+"0"
            number=number/2
        else:
            binarynumber=binarynumber+"1"
            number=(number-1)/2

else:
    binarynumber="0"

return "".join(reversed(binarynumber))

number=number/2नाव देता है, तो number=number//2तेजी बेहतर, यह भी मैं जगह लेंगे number=number//2साथ number//=2और b=b+"0"साथb+="0"
Brambor

इसके अलावा, आपके पास ओपी की आवश्यकता के रूप में 0 पैडिंग नहीं है
ब्रम्बलर नोव

1
('0' * 7 + bin(6)[2:])[-8:]

या

right_side = bin(6)[2:]
'0' * ( 8 - len( right_side )) + right_side

2
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन समस्या का हल कैसे और / या क्यों करता है, के संबंध में अतिरिक्त संदर्भ प्रदान करने से उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
निक 3500

0

यह मानते हुए कि आप एक चर से प्रतिनिधित्व करने के लिए उपयोग किए जाने वाले अंकों की संख्या को पार्स करना चाहते हैं जो हमेशा स्थिर नहीं होता है, एक अच्छा तरीका यह होगा कि आप खतना का उपयोग कर सकें।

जब आप पावर सेट पर बाइनरी लागू करते हैं तो यह उपयोगी हो सकता है

import numpy as np
np.binary_repr(6, width=8)

0

सबसे अच्छा तरीका प्रारूप को निर्दिष्ट करना है।

format(a, 'b')

एक स्ट्रिंग प्रारूप में बाइनरी मान लौटाता है।

बाइनरी स्ट्रिंग को पूर्णांक में बदलने के लिए, int () फ़ंक्शन का उपयोग करें।

int('110', 2)

बाइनरी स्ट्रिंग का पूर्णांक मान लौटाता है।


उपयोगकर्ता जिस प्रारूप को चाहता था उसे प्राप्त करने के लिए बेहतर प्रारूप (a, '08b') होगा।
ZSG

0
def int_to_bin(num, fill):
    bin_result = ''

    def int_to_binary(number):
        nonlocal bin_result
        if number > 1:
            int_to_binary(number // 2)
        bin_result = bin_result + str(number % 2)

    int_to_binary(num)
    return bin_result.zfill(fill)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.