"प्रभावी कोडिंगपेक्षा चांगले काहीही नाही, अमिगो! जुन्या रोबोटवर विश्वास ठेवा."

"तुम्ही हेरांद्वारे वापरल्या जाणार्‍या सिफरबद्दल बोलत आहात?"

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

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

"अहो, त्यांच्यात काय साम्य आहे ते मी पाहतो... या सर्व यंत्रणा दोन शक्तींवर आधारित आहेत.

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

"चांगले निरीक्षण. चला 8 अंकांचा समावेश असलेल्या एन्कोडिंगसह सुरुवात करूया. मानवांना हे सर्वात सोपे वाटू शकते: फक्त 8 आणि 9 आणि - बूम - तुमच्याकडे ऑक्टल एन्कोडिंग (अंक प्रणाली) आहे. तुम्हाला अलीकडेच अक्षरांबद्दल सांगितले गेले होते , बरोबर ?"

"होय, मी होतो."

"बरं, आश्चर्यचकित! तुम्ही ऑक्टल सिस्टीम वापरून सांकेतिक अक्षरे एन्कोड केलेले सेट करू शकता. जर, नक्कीच, तुम्हाला खरोखरच आवश्यक असेल. ते वाटते त्यापेक्षा सोपे आहे. संपूर्ण संख्येसमोर फक्त 0 ठेवा.

"म्हणून जर अंकीय शब्दशः शून्याने सुरू होत असेल, तर त्याचा अर्थ अष्टक आहे का ?"

"होय, जावा त्याला ऑक्टल मानेल.

उदाहरणे:

कोड नोट्स
int x = 015;
x १३:१*८+५ आहे
int x = 025;
x 21: 2*8+5 आहे
int x = 0123;
x 83 आहे: 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
हे संकलित करणार नाही: 8 हे ऑक्टल एन्कोडिंगमध्ये वापरल्या जाणार्‍या चिन्हांपैकी एक नाही.

"तुम्हाला तुमच्या कोडमध्ये अष्टांक लिहिण्याची गरज नाही, पण ते काय आहेत हे तुम्हाला माहीत असायला हवे. " शेवटी, तुम्हाला इतरांनी लिहिलेले कोड वाचावे लागतील. आणि वर नमूद केल्याप्रमाणे, प्रोग्रामर हे मोठे शोधक आहेत.

बरं, लक्षात ठेवा की तुम्ही फक्त जाऊन प्रत्येक संख्येसमोर 0 लिहू शकत नाही.

"पण मला ते अष्टकीय व्हायचे असेल तर मी करू शकतो?"

"हो.

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

"तुम्हाला ते अद्याप समजले नसले तरीही, बायनरी एन्कोडिंग ही तुमची मूळ भाषा आहे. मी तुम्हाला त्याबद्दल आठवण करून देतो. जर ऑक्टलमध्ये फक्त 0-7 अंक असतील, तर बायनरीमध्ये फक्त 0 आणि 1 असेल."

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

"मी वर नमूद केल्याप्रमाणे, याचा संगणकाच्या अंतर्गत संरचनेशी सर्व काही संबंध आहे. संगणकातील प्रत्येक गोष्ट विजेवर चालते, आणि जसे घडते तसे, विजेचा वापर करून काहीतरी साठवण्याचा आणि प्रसारित करण्याचा सर्वात कार्यक्षम मार्ग म्हणजे दोन अवस्था: एकतर वायरमध्ये वीज नाही (शून्य) आणि वीज आहे (एक).

"म्हणूनच ती इतकी लोकप्रिय आहे... हम्म, मला खरंच ही भाषा आठवू लागली आहे!"

"सर्व यंत्रमानवांना ते उत्तम प्रकारे समजते. जरी जावामध्ये ती बर्‍याचदा वापरली जात नाही. जावा ही उच्च-स्तरीय भाषा मानली जाते, जी त्यावर चालणाऱ्या हार्डवेअरपासून पूर्णपणे अ‍ॅब्स्ट्रॅक्ट केली जाते. खरंच, डेटा संग्रहित करण्यासाठी आणि त्यावर प्रक्रिया करण्यासाठी कोणते स्वरूप वापरले जाते याची तुम्हाला खरोखर काळजी आहे का? संगणकाच्या आत?

"परंतु गेल्या दशकांमध्ये, प्रोग्रामरना बायनरी एन्कोडिंग (आणि त्यावर आधारित इतर एन्कोडिंग) आवडते. परिणामी, Java मध्ये ऑपरेटर आहेत जे इनपुट म्हणून बायनरी संख्या घेतात. आणि फ्लोटिंग-पॉइंट नंबरची अचूकता त्यांच्या बायनरीवर अवलंबून असते. प्रतिनिधित्व

"थोडक्यात, न कळण्यापेक्षा या एन्कोडिंगबद्दल जाणून घेणे तुमच्यासाठी चांगले आहे."

"बरोबर. आणि ऑक्टल एन्कोडिंगच्या बाबतीत, जावाकडे बायनरी प्रणाली वापरून शब्दशः एन्कोड करण्याचा एक मार्ग आहे."

"म्हणजे ते फक्त 0 आणि 1 चे बनलेले असतील?"

"नक्कीच. जावा कंपाइलरला हे समजण्यासाठी की कोडमध्ये शून्य आणि एक दशांश संख्या नसून बायनरीमध्ये सांख्यिकीय शब्दशः एन्कोड केलेले आहे, सर्व बायनरी लिटरल्सची सुरुवात 0b ('b') उपसर्गाने करणे प्रथा आहे. ' बायनरी शब्दापासून आला आहे).

उदाहरणे:

कोड नोट्स
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 हे बायनरी एन्कोडिंगमध्ये वापरल्या जाणार्‍या चिन्हांपैकी एक नाही.

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

"दोन ते चौथ्या पॉवर म्हणजे काय?"

"सोळा. माझ्यापर्यंत पोहोचलेल्या रोबोटला विचारण्यासाठी तू योग्य प्रश्न शोधलास!"

"तुम्हाला असे वाटते की तुम्ही खूप दूर आला आहात. असो, सोळा. ऑक्टल आणि बायनरी एन्कोडिंग व्यतिरिक्त, अक्षरे हेक्साडेसिमलमध्ये देखील लिहिता येतात. हे एक अतिशय लोकप्रिय एन्कोडिंग आहे.

"ते असे आहे की जरी बायनरी नोटेशन हे संख्या प्रत्यक्षात कसे संग्रहित केले जातात याच्या शक्य तितक्या जवळ असले तरी, मानवांसाठी अशा संख्येसह प्रभावीपणे कार्य करणे खूप कठीण आहे: बायनरीमध्ये, संख्या 1 दशलक्ष 20 अंक आहे, 7 नाही.

"म्हणूनच प्रोग्रामर हेक्साडेसिमल सिस्टीम घेऊन आले. शेवटी, तुम्ही योग्यरित्या लक्षात घेतल्याप्रमाणे, 16 हा 2 हा 4 था पॉवर वर वाढवला जातो, त्यामुळे 4 बिट्स एका हेक्साडेसिमल अंकाशी जुळतात.

"म्हणून प्रत्येक 4 बिट्स आता एकाच हेक्साडेसिमल अंकात लिहिता येतील."

"बरोबर. हेक्साडेसिमल एन्कोडिंगचा स्वतःचा अनन्य उपसर्ग देखील आहे: 0x . उदाहरणे:

दशांश संख्या बायनरी नोटेशन हेक्साडेसिमल नोटेशन
१७ 0b 0001 0001 0x 1 1
0b 0010 1 00 1 0x 2 9
८५ 0b 0101 0101 0x 5 5
२५६ 0b 1 0000 0000 0x 1 0 0

"ठीक आहे, त्यामुळे आम्हाला ऑक्टल सिस्टीम कशी मिळाली हे पुरेसे स्पष्ट आहे: आम्ही फक्त 8 आणि 9 अंक बाहेर फेकले. पण आम्हाला हेक्साडेसिमल सिस्टीमसाठी 6 गहाळ अंक कोठे मिळतील? मला ते पहायला आवडेल!"

"हे सर्व सरळ आहे. इंग्रजी वर्णमालेतील पहिली 6 अक्षरे 6 गहाळ अंक म्हणून घेतली आहेत: A (10), B (11), C (12), D (13), E (14), F (15) .

उदाहरणे:

हेक्साडेसिमल नोटेशन बायनरी नोटेशन दशांश संख्या
0x 1 0b 0000 0001
0x 9 0b 0000 1001
0x 0b 0000 1010 10
0x 0b 0000 1011 11
0x 0b 0000 1100 12
0x डी 0b 0000 1101 13
0x 0b 0000 1110 14
0x F 0b 0000 1111 १५
0x 1 फॅ 0b 0001 1111 ३१
0x A F 0b 1010 1111 १७५
0x F F 0b 1111 1111 २५५
0x F F F 0b 1111 1111 1111 ४०९५

"तुम्ही हेक्साडेसिमल नंबर दशांश मध्ये कसे रूपांतरित कराल?"

"हे अगदी सोपे आहे. समजा तुमच्याकडे 0 x A F C F ही संख्या आहे. ती दशांश मध्ये किती आहे? प्रथम, आमच्याकडे एक स्थानात्मक संख्या प्रणाली आहे, म्हणजे एकूण संख्येमध्ये प्रत्येक अंकाचे योगदान एका घटकाने वाढते. 16 जसे आपण उजवीकडून डावीकडे जातो:

A * 16 3 + F * 16 2 + C * 16 1 + F

A हे चिन्ह 10 क्रमांकाशी संबंधित आहे, C हे अक्षर 12 आहे आणि F अक्षर पंधरा दर्शवते. आम्हाला मिळते:

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

अंकांशी सुसंगत असलेल्या विविध शक्तींना 16 वाढवल्यास, आम्हाला मिळते:

१० * ४०९६ + १५ * २५६ + १२ * १६ + १५

आम्ही सर्वकाही एकत्रित करतो आणि मिळवतो:

४५००७

"आता तुम्हाला माहिती आहे की 45007 मेमरीमध्ये कसे संग्रहित केले जाते."

"हो, मी करतो. ते 0x A F C F आहे "

"आता त्याचे रूपांतर बायनरीमध्ये करू. बायनरीमध्ये ते असे होईल:

0b 1010 1111 1100 1111

"चार बिट्सचा प्रत्येक संच अगदी एका हेक्साडेसिमल वर्णाशी संबंधित आहे. ते अतिशय सोयीचे आहे. कोणत्याही गुणाकार किंवा घातांकाशिवाय."