"प्रभावी कोडिंग से बेहतर कुछ भी नहीं है, अमीगो! पुराने रोबोट पर भरोसा करें।"

"क्या आप जासूसों द्वारा इस्तेमाल किए जाने वाले सिफर के बारे में बात कर रहे हैं?"

"बिल्कुल नहीं। मैं सुपाच्य रूप में जानकारी प्रस्तुत करने के बारे में बात कर रहा हूँ। अंक प्रणाली के बारे में। आप जानते हैं कि रोजमर्रा की जिंदगी में अधिकांश लोग दशमलव प्रणाली का उपयोग करते हैं। यह प्रत्येक संख्या का प्रतिनिधित्व करने के लिए 10 प्रतीकों का उपयोग करता है: 0, 1, 2 , 3, 4, 5, 6, 7, 8, 9. 10 अंक होते हैं, इसलिए प्रणाली को दशमलव कहा जाता है।

"यह मनुष्यों के लिए उनकी दस अंगुलियों के साथ सुविधाजनक था। लेकिन प्रोग्रामर बड़े समय के आविष्कारक हैं। वे तुरंत एन्कोडिंग के साथ आए जो अंकों की एक अलग संख्या का उपयोग करते हैं। उदाहरण के लिए, 2, 8, 16, या 64 अंक। उन्होंने ऐसा किया। इसे कंप्यूटर के लिए सुविधाजनक बनाएं, जो 'सिग्नल है/सिग्नल नहीं है' पर भरोसा करते हैं।"

"आह, मैं देखता हूं कि उनमें क्या समानता है... ये सभी प्रणालियां दो की शक्तियों पर आधारित हैं।

ऑक्टल एन्कोडिंग

"अच्छा अवलोकन। आइए एक एन्कोडिंग से शुरू करें जिसमें 8 अंक शामिल हैं। मनुष्यों को यह सबसे आसान लग सकता है: बस संख्या 8 और 9 को छोड़ दें और - बूम - आपके पास ऑक्टल एन्कोडिंग (अंक प्रणाली) है। आपको हाल ही में शाब्दिक के बारे में बताया गया था, ठीक है ?"

"हाँ मैं था।"

"ठीक है, आश्चर्य! आप ऑक्टल सिस्टम का उपयोग करके एन्कोडेड न्यूमेरिक लिटरल सेट कर सकते हैं। यदि, निश्चित रूप से, आपको वास्तव में इसकी आवश्यकता है। यह सुनने में जितना आसान लगता है। बस पूरी संख्या के सामने 0 लगा दें।

"तो अगर एक संख्यात्मक शाब्दिक शून्य से शुरू होता है, तो क्या इसका मतलब यह है कि यह अष्टक है ?"

"हाँ, जावा इसे ऑक्टल के रूप में मानेगा।

उदाहरण:

कोड टिप्पणियाँ
int x = 015; 
x 13: 1*8+5 है
int x = 025; 
x 21: 2*8+5 है
int x = 0123; 
एक्स 83 है: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
यह संकलित नहीं होगा: 8 ऑक्टल एन्कोडिंग में प्रयुक्त प्रतीकों में से एक नहीं है।

"यह संभावना नहीं है कि आपको अपने कोड में ऑक्टल नंबर लिखने की आवश्यकता है, लेकिन आपको पता होना चाहिए कि वे क्या हैं। " आखिरकार, आपको दूसरों द्वारा लिखे गए कोड को पढ़ना होगा। और जैसा ऊपर बताया गया है, प्रोग्रामर बड़े आविष्कारक हैं।

ठीक है, याद रखें कि आप बस जाकर हर नंबर के सामने 0 नहीं लिख सकते।"

"लेकिन अगर मैं इसे ऑक्टल होने का इरादा रखता हूं, तो मैं कर सकता हूं?"

"हाँ।

बाइनरी एन्कोडिंग

"भले ही आप इसे अभी तक नहीं समझते हैं, बाइनरी एन्कोडिंग आपकी मूल भाषा है। मैं आपको इसके बारे में याद दिलाता हूं। यदि ऑक्टल में केवल 0-7 अंक हैं, तो बाइनरी में केवल 0 और 1 है।"

"यह एन्कोडिंग क्यों आवश्यक है?"

"जैसा कि मैंने ऊपर उल्लेख किया है, यह सब कुछ एक कंप्यूटर की आंतरिक संरचना के साथ करना है। एक कंप्यूटर में सब कुछ बिजली से चलता है, और जैसा कि होता है, बिजली का उपयोग करके किसी चीज को स्टोर और संचारित करने का सबसे कुशल तरीका दो राज्यों का उपयोग करना है: या तो तार (शून्य) में बिजली नहीं है और बिजली है (एक)।

"इसीलिए यह इतना लोकप्रिय है... हम्म, ऐसा लगता है कि मुझे वास्तव में यह भाषा याद आने लगी है!"

"सभी रोबोट इसे पूरी तरह से समझते हैं। हालाँकि यह जावा में बहुत बार उपयोग नहीं किया जाता है। जावा को एक उच्च-स्तरीय भाषा माना जाता है, जो उस हार्डवेयर से पूरी तरह से सारगर्भित है, जिस पर यह चलता है। वास्तव में, क्या आप वास्तव में परवाह करते हैं कि डेटा को स्टोर और प्रोसेस करने के लिए किस प्रारूप का उपयोग किया जाता है। एक कंप्यूटर के अंदर?

"लेकिन पिछले दशकों में, प्रोग्रामर बाइनरी एन्कोडिंग (और इसके आधार पर अन्य एन्कोडिंग) से प्यार करने लगे हैं। नतीजतन, जावा में ऐसे ऑपरेटर हैं जो इनपुट के रूप में बाइनरी नंबर लेते हैं। और फ़्लोटिंग-पॉइंट नंबरों की सटीकता उनके बाइनरी पर निर्भर करती है। प्रतिनिधित्व।

"संक्षेप में, इस एन्कोडिंग के बारे में जानने से बेहतर है कि आप न जानें।"

"ठीक है। और जैसा कि ऑक्टल एन्कोडिंग के मामले में था, जावा के पास बाइनरी सिस्टम का उपयोग करके अक्षर को एन्कोड करने का एक तरीका है।"

"तो वे केवल 0s और 1s से बने होंगे?"

"बिल्कुल सही। जावा कंपाइलर को यह समझने के लिए कि कोड में शून्य और एक से मिलकर दशमलव संख्या के बजाय बाइनरी में एक संख्यात्मक शाब्दिक एन्कोडेड होता है, यह सभी बाइनरी शाब्दिकों के लिए उपसर्ग 0b ('बी') के साथ शुरू करने के लिए प्रथागत है । 'बाइनरी शब्द से आया है)।

उदाहरण:

कोड टिप्पणियाँ
int x = 0b100; 
х 4: 1*4+0*2+0 है
int x = 0b1111; 
х 15: 1*8+1*4+1*2+1 है
int x = 0b1111000111; 
х 967 है: 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 +0*2 3 +1*2 2 +1*2+1;
int x = 0b12000;
यह संकलित नहीं होगा: 2 बाइनरी एन्कोडिंग में प्रयुक्त प्रतीकों में से एक नहीं है।

हेक्साडेसिमल एन्कोडिंग

"चौथी शक्ति से दो क्या है?"

"सोलह। आपने एक रोबोट से पूछने के लिए सही सवाल उठाया है जो मेरे पास आया है!"

"ऐसा लगता है कि आप बहुत दूर आ गए हैं। वैसे भी, सोलह। ऑक्टल और बाइनरी एन्कोडिंग के अलावा, हेक्साडेसिमल में शाब्दिक भी लिखे जा सकते हैं। यह एक बहुत लोकप्रिय एन्कोडिंग है।

"ऐसा इसलिए है क्योंकि हालांकि बाइनरी नोटेशन जितना संभव हो उतना करीब है कि वास्तव में संख्याओं को कैसे संग्रहीत किया जाता है, मनुष्यों के लिए ऐसी संख्याओं के साथ प्रभावी ढंग से काम करना बहुत मुश्किल है: बाइनरी में, नंबर एक मिलियन 20 अंक, 7 नहीं।

"यही कारण है कि प्रोग्रामर हेक्साडेसिमल प्रणाली के साथ आए। आखिरकार, जैसा कि आपने सही ढंग से नोट किया है, 16 2 को चौथी शक्ति तक बढ़ा दिया गया है, इसलिए ठीक 4 बिट एक हेक्साडेसिमल अंक के अनुरूप हैं।

"तो अब हर 4 बिट को एक हेक्साडेसिमल अंक में लिखा जा सकता है।"

"ठीक है। हेक्साडेसिमल एन्कोडिंग का भी अपना अनूठा उपसर्ग है: 0x । उदाहरण:

दशमलव संख्या बाइनरी नोटेशन हेक्साडेसिमल नोटेशन
17 0बी 0001 0001 0x 1 1
4 1 0बी 0010 1 00 1 0x 2 9
85 0बी 0101 0101 0x 5 5
256 0बी 1 0000 0000 0x 1 0 0

"ठीक है, तो यह काफी स्पष्ट है कि हमें ऑक्टल सिस्टम कैसे मिला: हमने केवल संख्या 8 और 9 को बाहर कर दिया। लेकिन हमें हेक्साडेसिमल सिस्टम के लिए 6 लापता अंक कहां से मिले? मैं उन्हें देखना चाहूंगा!"

"यह सब सीधा है। अंग्रेजी वर्णमाला के पहले 6 अक्षरों को 6 लापता अंकों के रूप में लिया गया था: (10), बी (11), सी (12), डी (13), (14), एफ (15) .

उदाहरण:

हेक्साडेसिमल नोटेशन बाइनरी नोटेशन दशमलव संख्या
0x 1 0बी 0000 0001 1
0x 9 0बी 0000 1001 9
0x 0बी 0000 1010 10
0x 0बी 0000 1011 11
0x सी 0बी 0000 1100 12
0x डी 0बी 0000 1101 13
0x 0बी 0000 1110 14
0x एफ 0बी 0000 1111 15
0x 1 एफ 0बी 0001 1111 31
0x एफ 0बी 1010 1111 175
0x एफ एफ 0बी 1111 1111 255
0x एफ एफ एफ 0बी 1111 1111 1111 4095

"आप एक हेक्साडेसिमल संख्या को दशमलव में कैसे बदलते हैं?"

"यह बहुत सरल है। मान लें कि आपके पास संख्या 0 x A F C F है। यह दशमलव में कितना है? सबसे पहले, हमारे पास एक स्थितीय संख्या प्रणाली है, जिसका अर्थ है कि कुल संख्या में प्रत्येक अंक का योगदान एक कारक से बढ़ता है। 16 जब हम दाएँ से बाएँ चलते हैं:

* 16 3 + एफ * 16 2 + सी * 16 1 + एफ

प्रतीक A संख्या 10 से मेल खाता है, अक्षर C कहता है कि हमारे पास संख्या 12 है, और अक्षर F पंद्रह का प्रतिनिधित्व करता है। हम पाते हैं:

10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15

अंकों के संगत विभिन्न घातों में 16 को ऊपर उठाने पर, हमें यह प्राप्त होता है:

10 * 4096 + 15 * 256 + 12 * 16 + 15

हम सब कुछ जोड़ते हैं और प्राप्त करते हैं:

45007

"अब आप जानते हैं कि 45007 मेमोरी में कैसे स्टोर होता है।"

"हाँ, मैं करता हूँ। यह 0x एफ सी एफ है "

"अब इसे बाइनरी में बदलते हैं। बाइनरी में यह होगा:

0बी 1010 1111 1100 1111

"चार बिट्स का प्रत्येक सेट बिल्कुल एक हेक्साडेसिमल वर्ण से मेल खाता है। यह बहुत सुविधाजनक है। बिना किसी गुणा या घातांक के।"