बाइनरी से हेक्स कन्वर्टर
नतीजा
हेक्साडेसिमल
- चार-चार के समूह
- 1011 0010
बाइनरी से हेक्स कन्वर्टर किसी संख्या को आधार-2 से आधार-16 में लिख देता है। इस परिवार का यह सबसे आसान बदलाव है, क्योंकि यहाँ गणना होती ही नहीं: एक हेक्साडेसिमल अंक ठीक चार बाइनरी अंकों को समेटता है, इसलिए पूरा काम यह है कि बाइनरी अंकों की श्रृंखला को दाईं ओर से चार-चार के समूहों में काटिए और हर समूह को एक अंक की तरह पढ़ लीजिए। 10110010 दो टुकड़ों में बँटता है, 1011 और 0010, जो B और 2 हैं, इसलिए जवाब B2 है। चार का यह तय रिश्ता ही वह वजह है जिससे हेक्साडेसिमल का अस्तित्व है — एक बाइट आठ बिट की होती है, यानी ठीक दो हेक्साडेसिमल अंक, और सोलह बिट का पता ठीक चार — और इसीलिए प्रोग्रामर मशीन कोड, रंगों के मान और मेमोरी के पते बाइनरी में नहीं, इसी आधार में लिखते हैं। पेज जवाब के नीचे वही समूहन छापता है जो उसने किया, क्योंकि यहाँ समूहन ही बदलाव है। आगे के शून्य लगाकर खाना भरना भी इसी वजह से दिखाया जाता है: अगर अंकों की गिनती चार की गुणज न हो तो सबसे बाईं ओर वाले समूह को शून्य जोड़कर चार का बनाया जाता है, और बाइनरी में ऐसे शून्य मान कुछ नहीं बदलते। लिखने के ढंग के बारे में दो बातें याद रखने लायक़ हैं। सबसे दाहिने सिरे से काटा जाता है, बाएँ से नहीं, क्योंकि इकाई का स्थान वहीं है — जैसे दशमलव संख्या में हज़ार अलग करते समय होता है। और बड़े-छोटे अक्षरों में फ़र्क़ नहीं पड़ता: B भी वही है और b भी, दोनों हर जगह समझे जाते हैं।
चार बिट के सारे सोलह समूह और हर एक का हेक्साडेसिमल अंक
| निबल | हेक्साडेसिमल | दशमलव |
|---|---|---|
| 0000 | 0 | 0 |
| 0001 | 1 | 1 |
| 0010 | 2 | 2 |
| 0011 | 3 | 3 |
| 0100 | 4 | 4 |
| 0101 | 5 | 5 |
| 0110 | 6 | 6 |
| 0111 | 7 | 7 |
| 1000 | 8 | 8 |
| 1001 | 9 | 9 |
| 1010 | A | 10 |
| 1011 | B | 11 |
| 1100 | C | 12 |
| 1101 | D | 13 |
| 1110 | E | 14 |
| 1111 | F | 15 |
यह पूरा बदलाव लिखा हुआ है। चार बिट का हर वह रूप जो बन सकता है, ठीक एक बार आता है, इसलिए काम के वक़्त कुछ निकालना नहीं पड़ता — तालिका बंद है, और जो इसे एक बार देख चुका उसके लिए कोई भी बाइनरी श्रृंखला चार-चार में काटकर पढ़ लेना भर है। यह ऊपर के इनपुट से निकाली हुई नहीं, तय है, इसलिए इनपुट बदलने पर यह नहीं बदलती; और दोनों में फ़र्क़ दिखे तो वह विरोधाभास नहीं है। पैनल उस संख्या का जवाब देता है जो टाइप की गई, तालिका उस आम सवाल का कि ये सोलह समूह हैं क्या। बीच का कॉलम ऊपर से नीचे पढ़िए तो 0 से F तक बिना किसी खाली जगह के चलता है, और यही बात है: अक्षर कोई अलग कोड नहीं, नौ के आगे अंकों की ही अगली कड़ी हैं। पहला कॉलम ऊपर से नीचे पढ़िए तो वह भी बाइनरी में उतना ही चढ़ता है, और यही इस पढ़त को रटने के बजाय मशीनी बनाता है। तीसरा कॉलम बीच का ही सीधा अर्थ दशमलव में देता है, इसलिए जिसे हेक्साडेसिमल याद न हो वह भी तालिका पढ़ सकता है। तालिका 1111 पर रुकती है क्योंकि वहीं एक हेक्साडेसिमल अंक ख़त्म होता है: अगला मान दूसरा अंक माँगता है, और वह वही समूहन है जो ऊपर का पेज पहले ही कर देता है।
फ़ॉर्मूला
10110010 = 1011 0010 = B2
- बाइनरी
- जिस संख्या को दोबारा लिखना है, आधार-2 में। बदलाव उसमें कुछ नहीं बदलता — यही मान बस अंकों के दूसरे समूह से लिख दिया जाता है
- निबल
- चार बाइनरी अंकों का एक समूह। इस बदलाव की इकाई यही है, और चार बिट के ठीक सोलह रूप बनते हैं — यही वजह है कि बाइनरी के साथ जोड़ी आधार-16 की बनती है और किसी और आधार की नहीं
- 0-9, A-F
- सोलह हेक्साडेसिमल अंक, हर निबल के लिए एक। इनमें दस तो वही अंक हैं जो हम रोज़ लिखते हैं और बाक़ी छह अक्षर A से F तक, जो दस से पंद्रह तक के मान रखते हैं
- पैडिंग
- पहले समूह के बाईं ओर जोड़े गए शून्य, जब अंकों की गिनती चार की गुणज न हो। ये समूहन बदलते हैं, मान कभी नहीं — इसीलिए 10110 और 00010110 एक ही संख्या के दो रूप हैं, और जवाब में छपा समूहन इनपुट से लंबा दिखता है
- दाईं ओर से
- काटने की दिशा। समूह दाएँ सिरे से बनाए जाते हैं क्योंकि इकाई का स्थान वहीं है — ठीक वैसे ही जैसे दशमलव संख्या में हज़ार दाईं ओर से अलग किए जाते हैं
- 53 बिट
- इनपुट कितना लंबा हो सकता है: तिरपन बाइनरी अंक, यानी 9007199254740991, जो दूसरे सिरे पर चौदह हेक्साडेसिमल अंक बनते हैं। यह वह चौड़ाई है जिसके आगे मशीन पड़ोसी पूर्ण संख्याओं में फ़र्क़ नहीं कर पाती, इसलिए लंबा इनपुट अंदाज़े से नहीं, अस्वीकार करके निपटाया जाता है
यह वह बदलाव है जो लोग सबसे ज़्यादा बार करते हैं और सबसे कम बार उसे बदलाव मानते हैं। डीबगर में बाइट पढ़ना, रंग का मान जाँचना, सबनेट मास्क निकालना, हैश का शुरुआती टुकड़ा खोलना, यंत्र का रजिस्टर डंप पढ़ना, या लॉग में दो फ़्लैग आपस में मिलाना — इन सबमें सच बिटों का होता है और हेक्साडेसिमल उसका छपने का ढंग है, और इन दो नज़रों के बीच आना-जाना निचले स्तर के काम का रोज़ का हिस्सा है। दोनों दिशाएँ काम आती हैं: यंत्र की शीट रजिस्टर हेक्साडेसिमल में देती है और जिस बिट को जाँचना है वह उसे खोलकर मिलता है, जबकि स्कोप की तरंग या बिट-पैटर्न का कोई सवाल बाइनरी में आता है और उसे उसी रूप में लिखना पड़ता है जिसमें दस्तावेज़ लिखा है। विद्यार्थी इसे उस शॉर्टकट के रूप में सीखते हैं जो लंबी बाइनरी संख्याओं को सँभालने लायक़ बनाता है: सोलह अंकों की बाइनरी श्रृंखला पढ़ी नहीं जाती और उसके चार हेक्साडेसिमल अंक जाते हैं, और यह जानना कि रिश्ता चार का है — कोई ऐसी बात नहीं जिसे हर बार निकालना पड़े — काम से गणित पूरा हटा देता है। पेज वह समूहन छापता है ताकि शॉर्टकट कहा हुआ नहीं, दिखाया हुआ लगे, और ठीक इसी वजह से यह हाथ से किए बदलाव की जाँच के लिए भी काम आता है, सिर्फ़ उसकी जगह लेने के लिए नहीं।
हल किए हुए उदाहरण
10110010 को दोबारा लिखना
- श्रृंखला को दाईं ओर से चार-चार के समूहों में काटिए: 1011 और 0010
- पहला समूह पढ़िए: 1011 यानी 8 + 2 + 1 = 11, और ग्यारह लिखा जाता है B
- दूसरा समूह पढ़िए: 0010 यानी 2, और दो लिखा जाता है 2
- दोनों अंक मिलकर B2 बनाते हैं
यही डिफ़ॉल्ट है, और यह एक बाइट है इसलिए चार-चार का बँटवारा बराबर आता है। B2 वही रूप है जिसमें यह मान किसी डीबगर या यंत्र की शीट में दिखता है — नीचे आठों बिट ज्यों के त्यों हैं, इसीलिए समूहन जवाब के बग़ल छपता है, कहा नहीं जाता।
एक अकेला निबल, 1111
- चार अंक यानी पहले से ठीक एक समूह
- 1111 यानी 8 + 4 + 2 + 1 = 15
- पंद्रह को हेक्साडेसिमल में F लिखा जाता है
- जवाब एक अकेला अंक है, F
सबसे बड़ा निबल, और यही दिखाता है कि अक्षर वहीं क्यों ख़त्म होते हैं: पंद्रह सबसे बड़ा मान है जो चार बिट रख सकते हैं, इसलिए F इस आधार का आख़िरी अंक है। एक हेक्साडेसिमल अंक से इससे बड़ा कुछ लिखा ही नहीं जा सकता, और यही गुण यहाँ काम में लाया जा रहा है।
छोटे इनपुट को भरना, 10110
- पाँच अंक चार-चार में नहीं बँटते, इसलिए दाईं ओर से शुरू कीजिए: 0110 एक पूरा समूह है
- बाईं ओर एक अंक बचा, उसके आगे शून्य लगाकर उसे चार का कीजिए: 0001
- 0001 यानी 1, और 0110 यानी 6, तो दो अंक बने 16
- जवाब में छपा समूहन 0001 0110 है, जो इनपुट से दो अंक लंबा है
यह वह जगह है जो ग़लती लगती है और ग़लती नहीं है। जवाब में छपा समूहन इनपुट से लंबा इसलिए है कि हेक्साडेसिमल अंक की चौड़ाई चार बिट है और आख़िरी समूह को उस चौड़ाई तक भरना पड़ता है। 10110 और 00010110 एक ही संख्या हैं, और भरना ही उस बचे अंक को पढ़ने लायक़ बनाता है — भरे बिना उस अकेले अंक के लिए तालिका में कोई अंक ही नहीं है।
ऋणात्मक मान, -10110
- ऋण चिह्न संख्या के बाहर बैठा है, इसलिए उसे अलग रखिए और 10110 बदलिए
- 10110 का समूहन 0001 0110 बनता है, जो 16 पढ़ा जाता है
- दोनों जवाबों पर चिह्न वापस लगाइए: -16
चिह्न दोनों आउटपुट में अंकों के बाहर ही रहता है। उसे अंदर मोड़ने के लिए तय चौड़ाई चाहिए, और यहाँ कोई चौड़ाई है ही नहीं — कोई प्रोसेसर इस मान को आठ बिट में रखता तो शून्य-एक का जो पैटर्न लिखता वह पूरी तरह इस बात पर टिका होता कि चौड़ाई आठ है। हेक्साडेसिमल पढ़त चिह्न इसीलिए बाहर रखती है, जिस वजह से बाइनरी पढ़त रखती है।
सीमाएँ
यह पेज सिर्फ़ पूर्ण बाइनरी संख्याएँ दोबारा लिखता है। यहाँ कोई बाइनरी बिंदु नहीं है, इसलिए भिन्नात्मक इनपुट बदला नहीं जाता, अस्वीकार कर दिया जाता है, और हेक्साडेसिमल भिन्न भी नहीं बनता। इनपुट ज़्यादा से ज़्यादा तिरपन बाइनरी अंकों का हो सकता है, जो दशमलव में 9007199254740991 और दूसरे सिरे पर चौदह हेक्साडेसिमल अंक होते हैं; इससे लंबे मान मशीन ठीक-ठीक नहीं रख सकती, इसलिए पूर्णांकित किए बजाय अस्वीकार कर दिए जाते हैं। इनपुट में आगे के शून्य स्वीकार होते हैं और अनदेखे किए जाते हैं, पर समूहन के जोड़े गए शून्य जान-बूझकर दिखाए जाते हैं — भरा हुआ जवाब अपने इनपुट से लंबा होना बनाया हुआ है, वह ग़लती नहीं है। आगे लगा ऋण चिह्न स्वीकार होता है और दोनों आउटपुट तक पहुँचाया जाता है। बड़े-छोटे अक्षर दोनों स्वीकार होते हैं, और जवाब हमेशा बड़े अक्षरों में छपता है; A-F के बाहर का कोई अक्षर और 0-1 के बाहर का कोई अंक स्वीकार नहीं होता। यह पेज पढ़ने का बदलाव है, गणना नहीं: दोनों आधारों में जोड़ना, घटाना, गुणा और भाग नीचे जुड़े कैलकुलेटर पेजों पर है, और उलटी दिशा, यानी हेक्साडेसिमल से बाइनरी, अपने अलग पेज पर। यहाँ जोड़, घटाव, बिटवाइज़ क्रियाएँ या शिफ़्ट कुछ भी नहीं होता।
अक्सर पूछे जाने वाले सवाल
- जवाब मेरे टाइप किए इनपुट से लंबा क्यों है?
- क्योंकि हेक्साडेसिमल अंक की चौड़ाई ठीक चार बिट है और सबसे बाईं ओर वाले समूह को उस चौड़ाई तक भरना पड़ता है। 10110 जैसा पाँच अंकों का इनपुट एक पूरा समूह (0110) और एक बचा हुआ अंक है, और उस बचे अंक के आगे शून्य लगाकर 0001 बनाया जाता है। शून्य मान नहीं बदलते — 10110 और 00010110 एक ही संख्या हैं — और भरना ही आख़िरी समूह को तालिका में ढूँढ़ने लायक़ बनाता है। भरने के बिना उस अकेले अंक के लिए तालिका में कोई पंक्ति ही न होती।
- इस बदलाव में कोई गणित है क्या?
- नहीं, और यही इसकी दिलचस्प बात है। चूँकि सोलह दो की घात है, दोनों आधारों की सीमा ठीक हर चार बाइनरी अंकों पर पड़ती है, इसलिए यह बदलाव गणना नहीं, दोबारा समूहन है। यहाँ कुछ गुणा नहीं होता, कुछ जोड़ा नहीं जाता और कोई कैरी नहीं उठता; अंक चार-चार में काटे जाते हैं और हर समूह तालिका से पढ़ लिया जाता है। इसी वजह से हेक्साडेसिमल किसी और छोटी लिखावट के बजाय इस्तेमाल होता है, और इसीलिए समूहन जवाब के बग़ल छपता है: विधि ही समूहन है, और उसे बताने के बजाय दिखा दिया जाता है।
- एक हेक्स अंक चार बिट का ही क्यों, तीन या पाँच का क्यों नहीं?
- क्योंकि चार बिट ठीक सोलह अलग-अलग मान रख सकते हैं और हेक्साडेसिमल में ठीक सोलह अलग-अलग अंक हैं। तीन बिट सिर्फ़ आठ मान देते, इसीलिए अष्टक का जोड़ा तीन के साथ बनता है, और पाँच बिट बत्तीस देते, जिसका कोई आम आधार इस्तेमाल नहीं करता। बिना कैरी के समूहन चलने के लिए यह मेल ठीक-ठीक होना ज़रूरी है, और ऐसा सिर्फ़ दो की घातों में होता है। इसी वजह से एक बाइट, जो आठ बिट की होती है, हमेशा ठीक दो हेक्साडेसिमल अंकों की होती है।
- सबसे लंबी कौन-सी बाइनरी संख्या बदल सकता हूँ?
- तिरपन अंकों की, जो दशमलव में 9007199254740991 है और बदलने के बाद चौदह हेक्साडेसिमल अंक बनती है। यह सीमा मशीन के संख्याएँ ठीक-ठीक रखने के ढंग से आती है, इस पेज का चुना हुआ नियम नहीं: इस चौड़ाई के आगे पड़ोसी पूर्ण संख्याओं में फ़र्क़ करना छूट जाता है, इसलिए लंबा इनपुट ईमानदारी से बदला नहीं जा सकता। उसे पूर्णांकित करने के बजाय एक संदेश के साथ अस्वीकार कर दिया जाता है, और यह मायने रखता है क्योंकि यहाँ गोल किया हुआ जवाब भी एक बिल्कुल आम हेक्साडेसिमल मान जैसा दिखता।
- क्या भिन्नात्मक बाइनरी संख्या बदल सकता हूँ?
- इस पेज पर नहीं। यहाँ न बाइनरी बिंदु स्वीकार होता है, न हेक्साडेसिमल भिन्न बनता है, क्योंकि भिन्न बदलने के लिए यह फ़ैसला भी लेना पड़ता कि कितने स्थान रखने हैं और आख़िरी को कैसे पूर्णांकित करना है। इस परिवार का हर पेज पूर्ण संख्याओं पर चलता है, इसलिए ऐसा कभी नहीं होता कि एक ही इनपुट एक पेज पर स्वीकार हो और दूसरे पर अस्वीकार। इस सीमा के भीतर बदलाव ठीक-ठीक है: लंबाई की हद तक कोई भी पूरी बाइनरी संख्या बिना कहीं भी पूर्णांकित किए ठीक एक हेक्साडेसिमल मान बनाती है।
- क्या जवाब में बड़े-छोटे अक्षरों से फ़र्क़ पड़ता है?
- जवाब हमेशा बड़े अक्षरों में छपता है — B2, b2 नहीं — पर दोनों एक ही मान हैं और दोनों हर जगह समझे जाते हैं। दस्तावेज़, डिसअसेंबलर और यंत्र की शीटें लगभग हमेशा बड़े अक्षर वापस करते हैं, जबकि रंगों के मान नीचे के अक्षरों में लिखने का रिवाज़ है, इसलिए किसी भी तरफ़ से आया पाठक अपनी देखी हुई शक्ल पहचान लेगा। यहाँ इनपुट दोनों तरह स्वीकार होता है, ताकि कहीं से कॉपी किया हुआ मान ज्यों का त्यों चल जाए।
संदर्भ
- Hexadecimal — the base-sixteen system, the digits beyond nine, and the relationship between one hexadecimal digit and four binary digits — Wolfram MathWorld (United States)
- Binary number — the base-two system and positional notation, which is what makes a fixed-width regrouping possible — Wolfram MathWorld (United States)
- Nibble — the four-bit group that one hexadecimal digit corresponds to, and the unit this conversion is carried out in — Wolfram MathWorld (United States)