आप पायथन में द्विआधारी शाब्दिक कैसे व्यक्त करते हैं?


351

पायथन शाब्दिक के साथ एक पूर्णांक को द्विआधारी संख्या के रूप में कैसे व्यक्त करते हैं?

मैं आसानी से हेक्स के लिए उत्तर खोजने में सक्षम था:

>>> 0x12AF
4783
>>> 0x100
256

और अष्टक:

>>> 01267
695
>>> 0100
64

पायथन में बाइनरी को व्यक्त करने के लिए आप शाब्दिक का उपयोग कैसे करते हैं?


उत्तर का सारांश

  • पायथन 2.5 और उससे पहले: बाइनरी का उपयोग करके व्यक्त कर सकते हैं int('01010101111',2)लेकिन शाब्दिक के साथ नहीं।
  • पायथन 2.5 और उससे पहले: बाइनरी शाब्दिक रूप से व्यक्त करने का कोई तरीका नहीं है।
  • पायथन 2.6 बीटा: आप ऐसा कर सकते हैं: 0b1100111या 0B1100111
  • पायथन 2.6 बीटा: एक अष्टक का प्रतिनिधित्व करने के लिए अनुमति देगा 0o27या 0O27(दूसरा वर्ण O अक्षर है)।
  • पायथन 3.0 बीटा: 2.6 के रूप में ही, लेकिन अब 027ऑक्टल्स के लिए पुराने सिंटैक्स की अनुमति नहीं देगा ।

जवाबों:


291

संदर्भ के लिए- भविष्य के पायथन संभावनाएं:
पायथन 2.6 के साथ शुरू आप उपसर्ग 0 बी या 0 बी का उपयोग करके द्विआधारी शाब्दिक व्यक्त कर सकते हैं :

>>> 0b101111
47

आप किसी संख्या का द्विआधारी प्रतिनिधित्व प्राप्त करने के लिए नए बिन फ़ंक्शन का उपयोग कर सकते हैं :

>>> bin(173)
'0b10101101'

प्रलेखन का विकास संस्करण: पायथन 2.6 में नया क्या है


72
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

दूसरा रास्ता।


2
आपके पास स्ट्रिंग्स होने पर यह दिलचस्प है, लेकिन यदि शुद्ध संख्याओं के साथ काम करते हैं, तो आप कोड में अनावश्यक संगणना जोड़ते हैं।
डेनियल मोलर

28

आप पायथन में द्विआधारी शाब्दिक कैसे व्यक्त करते हैं?

वे "बाइनरी" शाब्दिक नहीं हैं, बल्कि "पूर्णांक शाब्दिक" हैं। आप एक साथ एक द्विआधारी प्रारूप के साथ पूर्णांक शाब्दिक व्यक्त कर सकते हैं 0एक के बाद Bया bशून्य और, उदाहरण के लिए की एक श्रृंखला के द्वारा पीछा किया:

>>> 0b0010101010
170
>>> 0B010101
21

पायथन 3 डॉक्स से , ये पायथन में पूर्णांक शाब्दिक प्रदान करने के तरीके हैं:

निम्नलिखित शाब्दिक परिभाषाओं द्वारा पूर्णांक का वर्णन किया गया है:

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

उपलब्ध मेमोरी में क्या संग्रहीत किया जा सकता है इसके अलावा पूर्णांक शाब्दिक की लंबाई के लिए कोई सीमा नहीं है।

ध्यान दें कि शून्य शून्य दशमलव संख्या में अग्रणी शून्य की अनुमति नहीं है। यह सी-स्टाइल ऑक्टल शाब्दिक विस्मरण के लिए है, जिसे पायथन ने संस्करण 3.0 से पहले इस्तेमाल किया था।

पूर्णांक शाब्दिक के कुछ उदाहरण:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

संस्करण 3.6 में बदल गया: अंडरर्सकोर्स को अब शाब्दिक रूप से समूहीकृत करने की अनुमति है।

बाइनरी व्यक्त करने के अन्य तरीके:

आपके पास एक स्ट्रिंग ऑब्जेक्ट में शून्य और एक हो सकता है जिसे हेरफेर किया जा सकता है (हालांकि आपको ज्यादातर मामलों में पूर्णांक पर बिटवाइज़ संचालन करना चाहिए) - बस शून्य और लोगों के स्ट्रिंग को पास करें और जिस आधार से आप परिवर्तित कर रहे हैं (2) ):

>>> int('010101', 2)
21

आप वैकल्पिक रूप से 0bया 0Bउपसर्ग कर सकते हैं :

>>> int('0b0010101010', 2)
170

यदि आप इसे 0आधार के रूप में पास करते हैं , तो यह आधार 10 मान लेगा यदि स्ट्रिंग उपसर्ग के साथ निर्दिष्ट नहीं करता है:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

मानव वापस पढ़ने योग्य बाइनरी से अंतर में परिवर्तित करना:

द्विआधारी शाब्दिक के स्ट्रिंग प्रतिनिधित्व को देखने के लिए आप एक पूर्णांक को बिन पास कर सकते हैं:

>>> bin(21)
'0b10101'

और अगर आप को जोड़ सकते हैं binऔर intआगे और पीछे जाने के लिए:

>>> bin(int('010101', 2))
'0b10101'

यदि आप पूर्ववर्ती शून्य के साथ न्यूनतम चौड़ाई रखना चाहते हैं तो आप एक प्रारूप विनिर्देश का उपयोग कर सकते हैं:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'

2

यहां प्रारंभ में 0 निर्दिष्ट करता है कि आधार 8 (10 नहीं) है, जो देखने में बहुत आसान है:

>>> int('010101', 0)
4161

यदि आप 0 से शुरू नहीं करते हैं, तो अजगर मान लेता है कि संख्या 10 बेस है।

>>> int('10101', 0)
10101

-1

जहां तक ​​मैं पायथन को बता सकता हूं, 2.5 के माध्यम से, केवल हेक्साडेसिमल और ऑक्टल शाब्दिक का समर्थन करता है। मुझे भविष्य के संस्करणों में बाइनरी जोड़ने के बारे में कुछ चर्चाएं मिलीं लेकिन कुछ भी निश्चित नहीं है।


-3

मुझे पूरा यकीन है कि पायथन 3.0 में शायद बिन () के साथ हेक्स () और ओक्ट () के साथ जाने के कारण यह चीजों में से एक है।

EDIT: सभी मामलों में lbrandy का जवाब सही है।

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