एल्गोरिथ्म्स और डेटा स्ट्रक्चर्स

दशमलव (Decimal) संख्याओं को बाइनरी (Binary) में बदलें

कंप्यूटर साइंस में यह एक बुनियादी कौशल है कि हम रोज़मर्रा में इस्तेमाल होने वाली दशमलव संख्याओं को कंप्यूटर द्वारा इस्तेमाल की जाने वाली बाइनरी (Binary) संख्याओं में कैसे बदलें। बाइनरी प्रणाली में, प्रत्येक अंक की स्थिति दो के किसी निश्चित घात का प्रतिनिधित्व करती है। आप बाइनरी संख्या को इस तरह देख सकते हैं कि वह यह बताती है किन-किन दो के घातों का योग उस संख्या को बनाने में जरूरी है।
दशमलव (base-10) संख्या (Number in base-10)
128
64
32
16
8
4
2
1
योग (Sum)
114
0
1
1
1
0
0
1
0
114 = 64 + 32 + 16 + 2
12
0
0
0
0
1
1
0
0
12 = 8 + 4
13
0
0
0
0
1
1
0
1
13 = 8 + 4 + 1
बाइनरी अभिव्यक्ति में हर ‘1’ का मतलब होता है कि संबंधित दो के घात को उस संख्या के योग में जोड़ा जाना चाहिए, जबकि ‘0’ का मतलब होता है कि वह घात इस्तेमापन में शामिल नहीं है। बाइनरी प्रणाली की खूबी इसकी सरलता और अद्वितीयता में ही निहित है।
💡
प्रत्येक संख्या की सिर्फ एक ही बाइनरी अभिव्यक्ति होती है, जो अलग-अलग दो के घातों के योग से बनती है।

दायीं ओर का सबसे अंतिम बिट (Rightmost Bit) निकालना

शुरुआत करते हैं यह समझने से कि बाइनरी अभिव्यक्ति में सबसे दायीं ओर का बिट कैसे निकाला जाए। जैसे दशमलव प्रणाली में किसी संख्या का अंतिम अंक निकालने के लिए उसे 10 से भाग देकर शेषफल (remainder) लिया जाता है (जैसे प्रोग्रामिंग भाषाओं में % 10), वैसे ही बाइनरी में सबसे दायीं ओर का बिट निकालने के लिए उस संख्या को 2 से भाग देकर शेषफल (% 2) लिया जाता है। इसका मतलब यह भी है कि कोई संख्या अगर विषम (odd) है तो उसका सबसे अंतिम बिट 1 होगा, और यदि वह सम (even) है तो अंतिम बिट 0 होगा।
उदाहरण:
  • 114 के लिए दायीं ओर का बिट 0 होगा, क्योंकि 114 % 2 = 0
  • 13 के लिए दायीं ओर का बिट 1 होगा, क्योंकि 13 % 2 = 1

बाइनरी संख्या को शिफ्ट करना

जब दायीं ओर का बिट मिल गया, तो अगला क़दम पूरी बाइनरी संख्या को एक पोज़ीशन दायीं ओर शिफ्ट करना होता है। यह काम संख्या को 2 से floor-division (प्रोग्रामिंग भाषाओं में अक्सर / 2 या Python में // 2) करने के बराबर है। इससे सबसे दायीं ओर का बिट हट जाता है, और उसके बगल वाला बिट नया दायां बिट बन जाता है।
  • 114 (जिसकी बाइनरी अभिव्यक्ति है) को दायीं ओर शिफ्ट करने पर मिलता है, जो दशमलव में 114 / 2 = 57 के बराबर है।
  • 13 (जिसकी बाइनरी अभिव्यक्ति है) को दायीं ओर शिफ्ट करने पर मिलता है, जो दशमलव में 13 / 2 = 6 के बराबर है।

कन्वर्ज़न एल्गोरिथ्म (Conversion Algorithm)

दायीं ओर का बिट निकालने और बाइनरी संख्या को शिफ्ट करने के इन दो ऑपरेशनों की मदद से, दशमलव संख्या को बाइनरी में बदलने के लिए एक सरल एल्गोरिथ्म बना सकते हैं:
  1. बाइनरी अभिव्यक्ति रखने के लिए एक खाली string से शुरुआत करें।
  1. जब तक संख्या 0 से बड़ी हो:
      • 2 से भाग देकर शेषफल लें, यही दायीं ओर का बिट होगा।
      • इस बिट को अपनी बाइनरी string के बाईं ओर जोड़ें।
      • संख्या को 2 से floor-divide करें, यानी उसे एक पोज़ीशन दायीं ओर शिफ्ट करें।
  1. अगर अंतिम बाइनरी string खाली न हो, तो वही लौटाएं, वर्ना 0 लौटाएं।
इस एल्गोरिथ्म से आप किसी भी दशमलव (base-10) संख्या को उसकी منفرد बाइनरी अभिव्यक्ति में बदल सकते हैं।

मामूली (Minimal) कार्यान्वयन

b, d = '101001101', 0   # बाइनरी और दशमलव संख्या
power = 1               # 2 का वर्तमान घात (1, 2, 4, 8, 16, ...)

for bi in b[::-1]:      # सबसे कम महत्वपूर्ण बिट से सबसे महत्वपूर्ण बिट तक लूप चलाएं
    d += int(bi) * power
    power *= 2

print(d)
binary → decimal conversion
b, d = '', 5234         # बाइनरी और दशमलव संख्या

while d > 0:            # जब तक बिट्स को प्रोसेस करना बाकी है
    b = str(d % 2) + b  # इस बिट को string के बाईं ओर जोड़ें
    d //= 2             # संख्या को दायीं ओर शिफ्ट करें

print(b if b != '' else 0)
decimal → binary conversion
 
To check your solution you need to sign in
Sign in to continue