हेक्साडेसिमल क्यों सीखते हैं? [बन्द है]


28

मैंने अपने दिन में काफी इंट्रो प्रोग्रामिंग क्लास ली हैं, ज्यादातर मैं अपने हर तरह के प्रोग्रामिंग में अपने पैरों को गीला कर पाता हूं। आश्चर्य नहीं, बस के बारे में हर वर्ग एक ही प्रारूप के माध्यम से चलाता है: हार्डवेयर के लिए परिचय, सॉफ्टवेयर के लिए परिचय, और फिर आप वास्तविक प्रोग्रामिंग में मिलता है। हार्डवेयर और सॉफ़्टवेयर कैसे काम करते हैं, यह समझना बहुत महत्वपूर्ण है, मैं हमेशा एक ही विषय पर उलझन में रहा हूं जो हर एक पाठ्यक्रम में रहा है।

सॉफ्टवेयर खंड में मैंने पाया है कि असफल होने पर, वे हमेशा बाइनरी, हेक्साडेसिमल और कभी-कभी ऑक्टल नंबर सिस्टम में भी साक्षर होने पर बड़ा जोर देते हैं। मैं समझता हूं कि यह समझना अच्छा है कि ये चीजें क्या हैं, और एक कंप्यूटर उनकी व्याख्या कैसे करेगा, लेकिन मैंने खुद को वास्तव में यह जानने की आवश्यकता नहीं पाई कि उन संख्या प्रणालियों में से किसी को कैसे पढ़ना और लिखना है। वास्तव में, केवल समय मैंने देखा है कि बेस 10 के अलावा कुछ और सीएसएस में रंगों के लिए है, जो www.colorp.com.com जैसे कुछ का उपयोग करने पर भी आसान है

क्या मैं प्रोग्रामिंग दुनिया में इन गैर-आधार -10 नंबर सिस्टम के अद्भुत उपयोगों से अनभिज्ञ रहा हूं, या सभी प्रोग्रामिंग पाठ्यपुस्तकों में इन वर्गों को शामिल करने के लिए सिर्फ एक पुरानी परंपरा है? क्या किसी के पास एक अच्छा उदाहरण है जहां औसत प्रोग्रामर वास्तव में एक ऑक्टल नंबर का उपयोग करेगा?


1
क्या किसी के पास एक अच्छा उदाहरण है जहां औसत प्रोग्रामर वास्तव में एक ऑक्टल नंबर का उपयोग करेगा? हां, यदि आप कभी खुद को एविएशन इंडस्ट्री से संबंधित सॉफ्टवेयर लिखते हुए पाते हैं, तो आप ट्रांसपोंडर कोड का सामना करेंगे, जो कि 4 अंकों का ऑक्टल नंबर है। en.wikipedia.org/wiki/Transponder_%28aviation%29
बेन कॉटरेल

जवाबों:


14

सभी उत्तर अच्छे हैं लेकिन मुझे पता नहीं है कि मुझे लगता है कि सबसे मूल्यवान हिस्सा है। विभिन्न ठिकानों में "सोचना" सीखना कंप्यूटरों की संख्या को संभालने के तरीके से आपको अधिक धाराप्रवाह बनाता है।

यदि आप कम केस पत्रों की एक स्ट्रिंग को अच्छी तरह से पैक करना चाहते हैं, तो आप यह कैसे करेंगे?

खैर, 26 लोअर केस लेटर्स हैं, जो आसानी से 0-31 की रेंज में ट्रांसलेट हो जाते हैं जो कि 5-बिट नंबर है, आप 6 5-बिट नंबर को 32 बिट फील्ड (इंट?) में पैक कर सकते हैं और यहां तक ​​कि काफी बचे हुए हैं? कुछ विराम चिह्नों के लिए।

मैं यह नहीं कह रहा हूँ कि हेक्स इस तरह से सामान के साथ मदद करता है, लेकिन यह समझना कि संख्याएँ कैसे परिवर्तित होती हैं।

एक और मामला, हर बार जब आप अस्सी में कुछ लंबी संख्या से गुजरने के लिए आधार -64 का उपयोग करते हैं। क्या आप जानते हैं कि इसे कैसे लागू किया जाए? इसे इस तरह से क्यों लागू किया जाए? क्या आपको इस बात का भी अहसास था कि आप हर बार जब आप "CD KEY" टाइप करते हैं तो गेम के रजिस्ट्रेशन बॉक्स में टाइप करते हैं?

इसके अलावा, मज़े के लिए, आधार 12 के साथ थोड़ी देर के लिए खेलें। बेस 12 में मठ वास्तव में दिलचस्प हो जाता है (बेस 10 तुलना में बेवकूफ है, काश हम 6 उंगलियों के साथ विकसित होते - हम गणित की अपनी समझ में दशकों आगे हो सकते हैं)। कुछ बहुत स्मार्ट शुरुआती मनुष्यों ने घड़ी को विकसित करने के लिए बेस 12 का उपयोग किया।

बेस 10 में हमारे पास 3 "कूल" नंबर हैं जो 8, 6 और 4 के साथ "माइनर" नंबर के रूप में आसान पैटर्न, 2, 5 और 9 बनाते हैं। बेस 12 में आपके पास 2,3,4,6,11 "कूल" नंबर 8,9 और 10 "माइनर" कूल नंबरों के रूप में हैं, जिसका अर्थ है कि यदि हमने बेस 12 का उपयोग किया है तो हम संख्याओं में पैटर्न पहचानने में बहुत बेहतर होंगे क्योंकि हम उन्हें हर समय देख रहे होंगे।

साथ ही, बाइनरी। आप एक हाथ से 32 तक की गिनती कर सकते हैं - मैं इसे बहुत थोड़ा करता हूं, कभी-कभी काम आता है जब 5 तक गिनती होती है तो यह कटौती नहीं करता है :)

बाइनरी बहुत मज़ा है, लेकिन यह सिर्फ अच्छी तरह से अनुवाद नहीं करता है। जब आप हेक्स के साथ अच्छे हो जाते हैं, तो आप "ए" को 1010 के रूप में और "5" को 0101 के रूप में देखना शुरू करते हैं, और ये चीजें वास्तव में मायने रखती हैं। यदि आपके पास एक बिटफ़ील्ड है जिसे आप 6 बिट: 00100000 निकालना चाहते हैं, तो आप क्या करते हैं "और" इसके साथ? आपको बस पता होना चाहिए कि यह 0x20 है।

यदि आप 0x0600 के साथ कोड को ands कुछ देखते हैं जो बिट्स निकाले जा रहे हैं? आपको इसके बारे में सोचे बिना भी पता होना चाहिए - आपको वास्तव में पढ़ना चाहिए कि जैसे कि यह 0000011000000000 लिखा गया था (लेकिन पढ़ने में आसान है क्योंकि आपको शून्य की गिनती नहीं करनी है)।

आप अपने मस्तिष्क और डेटा को संसाधित करने की क्षमता को सीमित क्यों करना चाहेंगे?


दरअसल, बेस 60 में घड़ियों का विकास किया गया था
डेनिस डी बर्नार्डी

@ डेनिस मैं इस धारणा के तहत था कि वर्तमान सिद्धांत यह था कि वे एक ऐसे व्यक्ति द्वारा विकसित किए गए थे जो बेस बारह में गिने जाते थे जो उन लोगों को खोना चाहते थे जो सोच नहीं सकते थे कि उनकी उंगलियां पास हो सकती हैं। 60 सिर्फ 12 डिवीजनों को आगे 5 के समूहों में विभाजित किया गया है और आधार 10 ग्रन्ट्स द्वारा एक आफ्टर-हैक की तरह लगता है :)
बिल के

हो सकता है। सच कहूं तो, मैं किसी भी तरह से विशेषज्ञ नहीं हूं। आपकी टिप्पणी ने कुछ लंबी-भूली हुई स्मृति को वापस ला दिया। मुझे यह भी याद है कि 360 डिग्री में मापा गया कोण बेस -60 (और उसी बेबीलोनियन आविष्कारों द्वारा, उस पर) से आता है, लेकिन जैसा कि आप बताते हैं कि यह हो सकता है कि बेस -10 ग्रन्ट्स केवल अभिभूत थे जो मूल रूप से बेस -12 गणितज्ञ थे। :-) अब, कल्पना कीजिए कि अगर हम बेस -20 में गिनती कर रहे थे, जैसे कुछ अमेरिकी इंडियंस ने किया था। :
डेनिस डी बर्नार्डी

44

क्या सीखना है? आपको एक सक्षम प्रोग्रामर बनने के लिए विभिन्न संख्या आधारों को समझने की आवश्यकता है , लेकिन हेक्स के बारे में सीखना बहुत कम है, सिवाय इसके कि एबीसीडीईएफ 9 के बाद आता है।


8
ओपी अन्य आधारों से 10 बेसिस तक मानसिक रूप से स्थानांतरित करने में सक्षम होने का उल्लेख कर सकता है। यह एक बिंदु पर एक उपयोगी कौशल हो सकता है, और अभी भी निम्न स्तर के प्रोग्रामर की एक निश्चित श्रेणी के लिए हो सकता है, लेकिन आज काफी हद तक अप्रासंगिक है। उदाहरण के लिए, आप रूपांतरण को मामूली रूप से कर सकते हैं।
रीन हेनरिक्स

यह सही है। मुझे और अधिक स्पष्ट होना चाहिए था।
jwegner

2
@ मैं कभी ऐसा करने में बहुत अच्छा नहीं था (मुझे अपने सिर में गणित करना है), इसलिए मैं नहीं कह सकता। हालाँकि मैं हेक्स से Z80 असेंबली लैंग्वेज में ट्रांसजेंड होने के लिए मानसिक रूप से सक्षम था, जो उस समय करने में सक्षम होने के लिए एक उपयोगी चीज थी। मुझे संदेह है कि हेक्स से 80x86 कोडांतरक (या जो कुछ भी) आज भी काम कर रहे प्रोग्रामर के लिए उपयोगी है।
नील बटरवर्थ

1
@ नील बटरवर्थ: 8080 ऑप्सोड अष्टकोणीय में देखा गया है, वास्तव में, अगर स्मृति कार्य करती है। मेरी स्मृति इस बारे में वास्तविक है कि यह Z80 एक्सटेंशन पर कैसे लागू होता है।
डेविड थॉर्नले

1
@ नील: मुझे लगता है कि महत्वपूर्ण हिस्सा था रजिस्टर-टू-रजिस्टर निर्देश, जो बिट प्रारूप में 01xxxyyy प्रतीत होता है, जहां xxx गंतव्य और yyy स्रोत है। मैं नहीं जानता कि क्या कोई अन्य अष्टांगिक महत्व है।
डेविड थॉर्नले

18

क्या किसी के पास एक अच्छा उदाहरण है जहां औसत प्रोग्रामर वास्तव में एक ऑक्टल नंबर का उपयोग करेगा?

ऑक्टल? * Nix अनुमतियों के अपवाद के साथ, आम तौर पर नहीं।

हेक्साडेसिमल? बिलकुल। आप हम में से बड़ी संख्या में अनदेखी कर रहे हैं जो एम्बेडेड सिस्टम के आसपास बिट्स फेरबदल कर रहे हैं, बिट स्तर पर प्रोटोकॉल या फ़ाइल स्वरूपों को देख रहे हैं, वगैरह। लेकिन यकीन है, यदि आप धातु से दूर अनुप्रयोग या वेब काम कर रहे हैं, तो आप इसे आसानी से दूर कर सकते हैं।

उदाहरण: माइक्रोकंट्रोलर और इस तरह कॉन्फ़िगरेशन रजिस्टर।

54312 नंबर लें, बेतरतीब ढंग से पंचिंग कीज़ द्वारा। क्या आप बता सकते हैं कि कौन से बिट सेट हैं? मैं कम से कम अपने सिर के ऊपर से नहीं हट सकता। इसके बाद हेक्साडेसिमल 0xd428 है। उसदूसरी ओर, मुझे तुरंत बता देता है कि मैं जिस बिट पैटर्न को देख रहा हूं वह 1101 0100 0010 1000 है। यह उस तरह की चीज़ के लिए अधिक तार्किक रूप से संरचित है, और आप अपने आप को हर समय इस बात की आवश्यकता पाते हैं कि आप कब उसके करीब हों धातु। मान लीजिए कि उपरोक्त संख्या मुझे mcu से रीसेट पर मिलती है, और मुझे किसी कारण से बिट्स 7 और 9 सेट की आवश्यकता है। हेक्स में, मैं आसानी से देख सकता हूं कि परिणामी संख्या 0xd6a8 होनी चाहिए, लेकिन दशमलव में? यदि आप मुझसे पूछें तो यह 54952 है, कहीं भी सहज नहीं है। निश्चित रूप से, यह 640 को मूल्य में जोड़ने की बात है, लेकिन यह पता लगाने के लिए दर्द की अधिक है। बेशक, व्यवहार में, कोई व्यक्ति बिट में सही स्थिति में शिफ्ट हो सकता है और वह मूल मूल्य के साथ हो सकता है, लेकिन आप अभी भी जानना चाह सकते हैं कि अंतिम प्रतिनिधित्व क्या है।


1
किस प्रकार का संकेत प्रश्न "मुझे क्यों ध्यान देना चाहिए कि कौन से बिट सेट हैं?" कुछ (कई? अधिकांश?) अनुप्रयोगों के लिए यह प्रासंगिक नहीं है।
नील बटरवर्थ

10
सहमत - हम उच्च स्तरीय विकास की बात कर रहे हैं। निम्न स्तर, चाहे कोई विशेष बिट सेट हो या साफ न हो, लेकिन कभी-कभी यह निर्धारित करेगा कि खूनी माइक्रो जूते बिल्कुल भी, या यदि एक निश्चित परिधीय आपको बिजली की आवश्यकता है, या यदि यह y की बजाय x की घड़ी की गति से चलता है। । यह सिर्फ इसकी शुरुआत है, और यदि आप इस तरह के विकास से निपटते हैं, तो मूल रूप से, एकल बिट्स मायने रखते हैं। कभी-कभी बहुत। लेकिन फिर, यह आपके डोमेन पर निर्भर करता है, मैं सिर्फ कह रहा हूं; एम्बेडेड दुनिया को मत भूलना। =)
n42

1
+1 - मशीन के जितना अधिक आपको अलग-अलग आधारों का उपयोग करने की आवश्यकता होती है, उतना अधिक। यह सिर्फ एम्बेडेड नहीं है; अधिकांश भाषाओं में झंडे होते हैं और वे अक्सर स्पष्ट कारणों के लिए हेक्स में लिखे जाते हैं। इसके विपरीत, पहले प्रोग्रामिंग कोर्स में पढ़ाना काफी व्यर्थ है, लेकिन तब सबसे पहले प्रोग्रामिंग कोर्स काफी हद तक बेकार हो जाते हैं। लगभग सभी प्रोग्रामर खुद को सही सिखाते हैं?

1
@ स्वाद: ऐसा इसलिए है क्योंकि हेक्स पढ़ना आसान है। मैं 32 अंकों के बाइनरी मूल्य की तुलना में 8 अंकों के हेक्स मूल्य को बहुत तेज कर सकता हूं।
स्टीव एस

2
@Steve S: ईमानदारी से, मुझे संदेह है क्योंकि हम एक आलसी गुच्छा हैं, साथ ही .. 0x80 0b10000000 से कम लिखने के लिए छोटा है। लेकिन मैं सहमत हूं। मैं यह भी मानता हूँ कि यह पहले प्रोग्रामिंग कोर्स में काफी हद तक निरर्थक है, लेकिन आप इसे असतत गणित, रियल टाइम प्रोग्रामिंग, कंप्यूटर संगठन और इस तरह से हिला सकते हैं।
n42

12

क्या किसी के पास एक अच्छा उदाहरण है जहां औसत प्रोग्रामर वास्तव में एक ऑक्टल नंबर का उपयोग करेगा?

यदि आप Unix (या Linux) फ़ाइल में अनुमतियाँ सेट कर रहे हैं, तो आप 3-अंकीय ऑक्टल नंबर का उपयोग करते हैं। पहला अंक उपयोगकर्ता की अनुमति है, दूसरा समूह की अनुमति है, और अंतिम अंक वह अनुमतियाँ हैं जो अन्य सभी को मिलती हैं।

मुझे इस तथ्य को कोड में समझना था जो मैंने पिछले हफ्ते लिखा था।

यदि आप MD5 जैसे मानक हैशिंग एल्गोरिदम के आउटपुट को देखते हैं, तो आप अक्सर उन्हें हेक्स में लिखा हुआ पाएंगे। मैंने ऐसे कई मामले देखे हैं जहाँ यह असामान्य आधारों में अंकगणित की ओर ले जाता है।

यदि आप यह समझना चाहते हैं कि फ्लोटिंग पॉइंट का आंतरिक रूप से प्रतिनिधित्व कैसे किया जाता है, और इसलिए 1/10 का सही प्रतिनिधित्व नहीं किया जाता है, तो आपको यह समझने की आवश्यकता है कि विभिन्न आधारों में अंकगणित कैसे करें। यह गूढ़ ज्ञान है जिस दिन तक यह आपको पीछे से काटता है और अचानक आपको वास्तव में इसे जल्दी में समझने की आवश्यकता होती है।

और अन्य मामलों के एक टन हैं जहां आप कंप्यूटर के अंदर डेटा को मौलिक द्विआधारी प्रकृति को देखेंगे। बेशक अगर आप सिर्फ एक CRUD वेबसाइट लिख रहे हैं, तो आप संभवतः उनमें से किसी का सामना नहीं करेंगे क्योंकि यह उन स्तरों पर होता है जो किसी और ने पहले ही निपटा दिया है।


4
* nix अनुमतियां अष्टांगिक नहीं हैं। आप इन अभ्यावेदन के साथ गणितीय गणना नहीं करते हैं। सबसे अच्छे रूप में वे एक बाइनरी मास्क के अष्टक निरूपण हैं।
जोएल एथर्टन

@Joel Etherton: जब आप किसी फ़ाइल स्टेट से अनुमति प्राप्त करते हैं, तो वे संख्याओं के रूप में आते हैं जो डिफ़ॉल्ट रूप से आधार 10 में प्रदर्शित होंगे। यदि आप ऑक्टल से / से कनवर्ट करना नहीं समझते हैं, तो उन संख्याओं को समझना मुश्किल है। मैं इस तथ्य को समझाने के लिए आवश्यक दस्तावेज लिख रहा था। गणितीय गणनाएँ बहुत थीं।
btilly

@ बीटीली: आप गलत समझ रहे हैं कि मैं क्या कह रहा हूं। यदि आप फ़ाइल को 755 पर अनुमतियाँ सेट करते हैं, तो आपको इसे किसी भी चीज़ में नहीं जोड़ना होगा। यह सिर्फ एक मुखौटा है जो अनुमति संयोजनों का वर्णन करता है। सुनिश्चित करें कि आपको यह पहचानना है कि इसका मतलब है (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1), लेकिन ये अभी भी केवल बाइनरी मास्क का प्रतिनिधित्व हैं। जब आप "फ़ाइल स्टेट" कहते हैं, तो आप क्या कर रहे हैं? मैंने कभी भी आधार 10 में दी गई अनुमतियों के लिए एक फ़ाइल स्टेट नहीं देखी है (उस उदाहरण से सख्ती से चिपके हुए)।
जोएल एथर्टन

1
@ जॉयल एथरटन: कोशिश करें perl -le '@stat = stat(shift); print $stat[2]' some_fileऔर आपको आधार संख्या में एक स्टेटमेंट मिल जाएगा। आपको इसे पर्ल के chmodसमान तरीके से पास करना होगा। इसलिए यह एक डेटाबेस में उस तरह से संख्या को स्टोर करने के लिए समझ में आता है, जिस बिंदु पर मुझे यह दस्तावेज करने की आवश्यकता है कि उन संख्याओं को अधिक परिचित रीमिक्स अनुमतियों के साथ क्या करना है। जैसा कि मैंने कहा, यह कोई काल्पनिक उदाहरण नहीं था।
btilly

@ जॉयल एथरटन: कहते हैं कि आपके पास एक फ़ाइल है जिसकी अनुमति 419 (दशमलव) है, आप फ़ाइल को उपयोगकर्ता-निष्पादन योग्य बनाना चाहते हैं, लेकिन विश्व-पठनीय नहीं। आपको संख्या को संशोधित करने की आवश्यकता कैसे है? C स्टेट () कॉल में दी गई वैल्यू एक इंट है, जिसे आप प्रिंट करना चुनते हैं, ठीक है, एक और बात।
वेटिन

9

उम्मीद है, वास्तविक दुनिया में, आप हेक्स को बाइनरी से दशमलव में बदलने पर क्विज़ नहीं करेंगे। आपके पास अपने निपटान में ऐसे उपकरण होंगे जो किसी भी तरह से आपकी इच्छा के अनुसार बदल सकते हैं।

मैं मानता हूं कि आपको इस बात की समझ होनी चाहिए कि क्या चल रहा है, लेकिन जब आप इसे देख सकते हैं तो याद क्यों करेंगे?

हालाँकि, मैंने महत्वपूर्ण संख्याओं को याद रखना उपयोगी पाया है (मेरे लिए 0x64 = 100, 0xFF = 255, 0xFFFF = 65535, आदि) क्योंकि वे बहुत ऊपर आते हैं।

क्या मैं बाइनरी, हेक्स और ऑक्टल में 8675309 को बंद कर सकता हूं? नहीं, लेकिन मैं एक ऐसा टूल खोल सकता हूं, जब मुझे ज़रूरत हो।


3
आप 57005 भूल गए, आमतौर पर कांस्टेबल के रूप में इस्तेमाल किया जाता हैelvis = 57005;
बेवन

5

केवल एक चीज जिसके लिए मैंने कभी ऑक्टल का उपयोग किया है, वह यूनिक्स सिस्टम पर फ़ाइल अनुमति है।

हेक्स और बाइनरी बहुत उपयोगी हैं यदि आप वायर प्रोटोकॉल के करीब, या धातु डेटा ट्रांसफर के करीब कोई काम करते हैं। फंडामेंटल रूप से डेटा बाइनरी में बहता है, जिसे हेक्स के रूप में एक समय में तुच्छ रूप से प्रतिनिधित्व किया जाता है।

आपको यह भी पता चलेगा कि डेटा-शीट अक्सर हेक्स मूल्यों को उद्धृत करते हैं, इसलिए कोड में मूल्य दिखाना बेहतर होता है क्योंकि यह डेटाशीट में दिखाई देता है।

यदि आप उनमें से किसी एक का उपयोग करते हैं, तो आप अपने सिर में दशमलव से और कम से कम, सामान्य मूल्यों के लिए परिवर्तित करने में काफी कुशल हैं।

वह सब जो कहा; मुझे संदेह है कि भारी जोर ज्यादातर ऐतिहासिक है। जैसा कि आप कहते हैं कि बहुत सारे प्रोग्रामर हैं जिन्हें दशमलव के अलावा किसी भी चीज़ की बहुत कम ज़रूरत है।


5

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

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

बाइनरी अंक पैटर्न बनाते हैं । उदाहरण के लिए, यदि एकमात्र तरीका जिससे आप और मैं बात कर सकते हैं, एक सर्किट के माध्यम से है, हम यह स्थापित कर सकते हैं कि यदि आप मुझे पत्र ए भेजना चाहते हैं, तो आप मुझे द्विआधारी पैटर्न भेजेंगे: 1000001. चूंकि मैं आलसी हूं । मैं 7 सात अंकों को याद नहीं करना चाहता। बल्कि, मैं बाइनरी अंकों को छोटे में दर्शाने के लिए 2 नंबरिंग सिस्टम की शक्ति का उपयोग करूंगा। मैं 8 (2 ^ 3), या 16 (2 ^ 4) का उपयोग कर सकता हूं।

जैसा कि आप देख सकते हैं कि अधिकांश कंप्यूटर हार्डवेयर और सॉफ्टवेयर एक द्विआधारी प्रतिनिधित्व का उपयोग करते हैं और हम मानव द्विआधारी प्रतिनिधित्व को अधिक कुशल और दर्द रहित तरीके से पढ़ने के लिए 2 प्रतिनिधित्व शक्ति जैसे ऑक्टल और हेक्साडेसिमल का उपयोग करते हैं।

अब औसत प्रोग्रामर का उदाहरण जिसे 2 अभ्यावेदन की शक्ति को समझने की आवश्यकता है:

  1. ASCII
  2. यूनिकोड
  3. मेमोरी मैनेजमेंट प्रोग्रामिंग (स्टैक, हीप, मेमोरी एड्रेस, कोर डंप) को समझना
  4. डिबगिंग
  5. बाइनरी डेटा पढ़ना ज्यादातर हेक्स संपादक में किया जाता है।

अब मेरे अंतिम दो सेंट, मुझे बहुत विश्वास है कि आप बहुत जल्दी 2 अभ्यावेदन की किसी भी शक्ति को सीख सकते हैं (क्योंकि आप पहले से ही इंट्रो प्रोग्रामिंग पाठ्यक्रम प्रबंधित कर चुके हैं) .. आप रूपांतरण को भूल सकते हैं, लेकिन यदि आप चाहें तो यह एक विदेशी अवधारणा नहीं होनी चाहिए। एक औसत प्रोग्रामर बनने के लिए


3

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


3

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

मुझे संदेह है कि व्यवहार में अभी इसकी बहुत कम आवश्यकता है, लेकिन इसका ज्ञान शायद ही कोई बुरी बात हो सकती है।


यही वह जगह थी जहां मैंने अपने हेक्स कौशल का अधिग्रहण किया। बाद में, जब मैं वैक्स / वीएमएस पर एक प्रतीकात्मक डिबगर के बिना कोड को डीबग करने के लिए मजबूर किया गया तो तेज हो गया (हमने बिना किसी प्रतीक जानकारी के ग्राहकों को कोड भेज दिया)। आजकल, मैं शायद ही कभी इसका उपयोग करता हूं, हालांकि हम हेक्स में कुछ जानकारी को कुछ URL में एन्कोड करते हैं, और एक बार में यह उन्हें मक्खी पर डिकोड करने में सक्षम होने में मददगार होता है।
टॉमजी

3

यह बाइनरी / हेक्साडेसिमल को पढ़ने में "धाराप्रवाह" होने के बारे में नहीं है, लेकिन पर्याप्त आरामदायक है कि आप उन्हें मुठभेड़ करते समय जल्दी से मानसिक रूपांतरण कर सकते हैं। साधारण अंकगणित के साथ सहज होने के बिना प्रोग्रामिंग की कल्पना करें, और आपको हर बार दो बार गुणा करने के लिए एक कैलकुलेटर पर जाना होगा।

हेक्साडेसिमल / बाइनरी महत्वपूर्ण है क्योंकि यह वह भाषा है जो कंप्यूटर में बोलते हैं। आप इसे स्थानों में विशेष रूप से सामना करेंगे, खासकर जब डिबगिंग अभ्यास के माध्यम से जा रहे हैं और आपका डेटा हेक्स में है।

मैं बेस -2 को समझने के लिए महत्व पर भी जोर दूंगा कि आंतरिक रूप से अलग-अलग संख्यात्मक प्रकार का प्रतिनिधित्व कैसे किया जाता है, और अंकगणितीय कैसे काम करता है। उदाहरण के लिए, फ़्लोटिंग पॉइंट राउंडिंग समस्याओं और पूर्णांक ओवरफ़्लो के साथ कब और कैसे निपटना है, इस पर आपको बेहतर समझ होगी।

एक और उदाहरण के रूप में, बिटवाइज़ संचालन और बिट फ़्लैग अभी भी प्रोग्रामिंग में प्रचलित हैं, और यह एक और जगह है जहां आधार -2 की समझ महत्वपूर्ण है।


2

वास्तव में, केवल समय मैंने देखा है कि बेस 10 के अलावा कुछ और सीएसएस में रंगों के लिए है,

यूनिकोड कोड चार्ट में आपको कभी कोई पात्र नहीं देखना है ? कभी ऐसा URL नहीं देखा जो उसमें था %20? एक GUID का इस्तेमाल कभी नहीं किया ? IPv6 पता कभी नहीं देखा ? BLOBSQL में कभी शाब्दिक नहीं लिखा ? कभी एक हेक्स संपादक में एक फ़ाइल देखी? वहाँ एक है बहुत कुछ कंप्यूटर से संबंधित सामान कि conventially हेक्स में notated है की।

ऑक्टल के लिए, यह आजकल दुर्लभ है, लेकिन अभी भी यूनिक्स फाइल सिस्टम अनुमतियों के लिए उपयोग किया जाता है।

इसे भी देखें: बिटवाइज़ ऑपरेशंस के व्यावहारिक अनुप्रयोग

यहां तक ​​कि अगर आप कभी भी "वायर के करीब" प्रोग्रामिंग करने से बचने में सक्षम हैं, तो यह इस तथ्य से अवगत होना जरूरी है कि कंप्यूटर बाइनरी में संचालित होता है, एक साधारण कारण के लिए: एब्सट्रैक्ट लीक

intअधिकांश भाषाओं में अमूर्त इसकी निश्चित-चौड़ाई प्रकृति लीक। इंटेगर अतिप्रवाह करते हैं, और वे ऐसा 2 31 की तरह "गोल" बाइनरी नंबर पर करते हैं । एक दशमलव केवल विचारक वर्ष 2038 बग की व्याख्या करने में सक्षम नहीं होगा ।

The float/ doubleabstraction का इसका मूलांक 2 है। यदि आप लिखते हैं 0.1, तो आपको वास्तव में 0.1000000000000000055511151231257827021181583404541015625 मिलता है। और यदि आप एक सटीक 0.1 की उम्मीद कर रहे थे तो आपको कीड़े मिलेंगे।


2

विशेष संख्याओं को पहचानना जिनके पैटर्न अन्य ठिकानों में सरल हैं, अक्सर बग को हल करते समय एक विशाल सुराग होता है। यदि आपका उत्तर 347 गलत है, तो शायद इसका कोई मतलब नहीं है, लेकिन यदि यह 256 या 128 से दूर है, तो शायद इसका मतलब कुछ है। यदि आप -1 को एक अहस्ताक्षरित 16-बिट डेटा प्रकार में रखते हैं, तो आपको 65535 मिलता है, जो कि 65536 से 1 कम है। यदि आपको 2 ^ 16 पता है, तो आप तुरंत अपनी समस्या का समाधान कर लेते हैं।

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


1

कुछ अत्यधिक कुशल गणित और डेटा संपीड़न तकनीकें हैं जिनका उपयोग आप इन प्रणालियों को समझने और उनके काम करने के तरीके के बारे में कर सकते हैं। आप शायद अपनी पहली कुछ नौकरियों में उनका ज्यादा इस्तेमाल नहीं करेंगे। लेकिन जब आप सीनियर बन जाते हैं, तो उन्हें आपकी बैक पॉकेट में रखने के लिए कहा जाता है और आपसे कहा जाता है कि जबर्दस्ती की गई ओवरवर्क वाली डायनोसोर सर्वर पर चलने वाली ओवरगैजेड लेगेसी सिस्टम के लिए अच्छा है।
यह और अधिक महत्वपूर्ण हो जाता है जब आप नियंत्रक और इलेक्ट्रॉनिक्स के साथ काम कर रहे होते हैं, जिसमें एपीआई नहीं होता है। खासतौर पर अगर आप वो एपी लिख रहे हैं।


1

कंप्यूटर विज्ञान में अध्ययन का हिस्सा हैं प्रोग्रामिंग पाठ्यक्रमों के लिए, यह उस सामग्री को अच्छी तरह से जानने के लिए बहुत मायने रखता है। आप असेंबली लैंग्वेज में प्रोग्रामिंग करते समय, हार्डवेयर डिजाइन करते समय, औपचारिक भाषाओं पर कोर्स करते समय आदि विषय पर फिर से गौर करते हैं। मेरे विश्वविद्यालय के सभी इलेक्ट्रिकल इंजीनियरों को प्रोग्रामिंग के लिए इंट्रो में एक कोर्स की आवश्यकता होती है और वे संभवतः उस जानकारी का उपयोग करना जारी रखेंगे। उस के बाहर, बहुत महत्वपूर्ण नहीं है।


1

चारपाई के साथ काम करते समय ऑक्टल नंबर कभी-कभी उपयोगी होते हैं। उत्तरार्द्ध बाइट आधारित हैं, और एक अष्ट = 8 बिट्स = एक बाइट। उदाहरण के लिए, UTF-8 में, गैर-ASCII वर्णों में दो या अधिक बाइट्स हो सकते हैं; अष्टक संख्या, हेक्साडेसिमल संख्या की तुलना में उनका प्रतिनिधित्व करने के लिए अधिक सुविधाजनक है।

बिट्स उपयोगी हैं क्योंकि ... हे! आप जानते हैं कि आपका कंप्यूटर लगातार 0s और 1s के साथ काम कर रहा है, है ना? मेरा मतलब है कि गंभीरता से ... यह केवल मजाक करने में सक्षम होने के बारे में नहीं है कि कंप्यूटर वैज्ञानिक केवल वही हैं जो जानते हैं कि 1 + 1 = 10. यह बिट-संबंधित ऑपरेटरों या चर के रूप में भी उपयोगी है। बाद वाले झंडे की श्रृंखला से निपटने पर डेटाबेस में भंडारण की आवश्यकताओं को कम करने की अनुमति देते हैं।

हेक्साडेसिमल के रूप में, मुझे लगता है कि आपने अपने आरपीजी चरित्र के आँकड़े और उपकरण को बढ़ावा देने के लिए कभी भी एक हेक्स संपादक नहीं खोला है। अगर आपने चरित्र संपादक को डाउनलोड करने के बजाय ऐसा किया है, तो आपको अच्छी तरह पता होगा कि हेक्स संख्या की समझ बनाने में सक्षम होना क्यों सुविधाजनक है। ;-)


मुझे लगता है कि आपको "ओक्टेट" से मतलब है, "ऑक्टल" से नहीं। एक अष्टक अंक तीन बिट्स है। गैर-एएससीआईआई पात्रों के लिए ऑक्टल स्थिरांक का उपयोग सी के शुरुआती दिनों से एक होल्डओवर है, जो एक पीडीपी -11 पर विकसित किया गया था, जो अधिकांश प्रलेखन में ऑक्टल प्रतिनिधित्व का उपयोग करता था (यह पीडीपी -11 संदर्भ कार्ड देखें )।
TMN

मैं हो सकता हूं। अंग्रेजी मेरी मातृभाषा नहीं है। :-)
डेनिस डे बर्नार्डी

1

मैं 3 साल पहले विश्वविद्यालय से स्नातक हूं, और मुझे लगता है कि हेक्स संख्या को पढ़ने और लिखने में सक्षम होना बहुत महत्वपूर्ण है। मैं काम के लिए बहुत बड़ी एक्सएमएल फाइलों के साथ गड़बड़ करता हूं (बड़े अर्थ 100 एमबी +)। कभी-कभी आपको एक्सएमएल फाइल मिलेगी जो अमान्य XML चरित्र की शिकायत करती है, जो किसी भी पाठ संपादक में प्रदर्शित नहीं होती है इसलिए मुझे हेक्स संपादक का उपयोग करना था और अमान्य वर्णों को इंगित करने के लिए कोड लिखना था। हेक्स संख्या को जाने बिना वह कार्य बहुत कठिन होगा।


1

कई साल पहले मैंने 8 बिट सिस्टम पर काम करते समय हेक्स का मूल्य सीखा था।

यह समझने की स्पष्टता कि कुछ B000 या E7FF में स्थित था, अद्भुत था।

कल मुझे यह जानने की जरूरत थी कि पाठ की एक पंक्ति के अंत में कौन से वर्ण हैं। 0x0A और 0x0A 0x0D के बीच अंतर जानना वास्तव में महत्वपूर्ण हो सकता है।


1

क्या किसी के पास एक अच्छा उदाहरण है जहां औसत प्रोग्रामर वास्तव में एक ऑक्टल नंबर का उपयोग करेगा?

ऑक्टल इन दिनों बहुत दुर्लभ है, लेकिन मैं हेक्स का बहुत बार उपयोग करता हूं, और अक्सर बाइनरी में समस्याओं के बारे में सोचता हूं।

मैं मुख्य रूप से C और C ++ में कुछ ऑब्जेक्टिव C के साथ प्रोग्राम करता हूं, और लिनक्स और मैक ओएस एक्स पर रैस्टर और वेक्टर ग्राफिक्स के साथ बहुत सारे काम करता हूं। उन एरेनास में, यह कोड लिखना सर्वोपरि है जो कुशलता से चलता है और भंडारण का अच्छा उपयोग करता है। आपको उन तरीकों को भी समझना होगा जो मशीनों को आंतरिक रूप से दर्शाते हैं कि आप किसके साथ काम कर रहे हैं। यह देखने का सबसे सुविधाजनक तरीका हेक्स में है। उदाहरण के लिए, एक मानक 24-बिट रंगीन पिक्सेल को तीन बाइट्स में दर्शाया जाता है, और एक नज़र में जानने पर कि 0x000000 काला है, 0x00FF00 लाल है, और 0x008000 गुलाबी है, वास्तव में उपयोगी है!

मैं फ़ाइल स्वरूपों के लिए अंतरराष्ट्रीय मानकों के साथ भी बहुत काम करता हूं। एक मैं हाल ही में एमएक्सएफ के साथ काम कर रहा हूं, जिसका उपयोग प्रसारण, डीवीडी, आदि के लिए वीडियो संग्रहीत करने के लिए किया जाता है। यह एक द्विआधारी प्रारूप है, और फिर, यह हेक्स या कभी-कभी द्विआधारी का उपयोग करने के साथ सबसे आसानी से निपटा जाता है। जब आप डिबगिंग कर रहे हैं कि क्यों कुछ एमएक्सएफ-आधारित वीडियो आपके सिस्टम पर सही नहीं चल रहा है, तो वास्तव में कुछ 32-बिट फ़ील्ड पर नज़र रखना और स्क्रीन को खाली करने के लिए बिट का एहसास करना अनजाने में सेट है - और आप कर सकते हैं हेक्स में, लेकिन यह बेस 10 में बहुत असंभव है।

यदि आप अपने करियर लेखन पर्ल को टेक्स्ट स्ट्रिंग्स की मालिश करने के लिए खर्च करने जा रहे हैं, तो नहीं, आपको शायद हेक्स, ऑक्टल या बाइनरी से बहुत परिचित होने की आवश्यकता नहीं है। लेकिन जिस क्षण आप मेरे साथ काम करते हैं, हेक्स और बाइनरी कम से कम आवश्यक होते हैं।


0

यदि आप एक प्रोग्रामर बनना चाहते हैं तो आपको हेक्साडेसिमल पता होना चाहिए। यह आपके लिए बहुत ही अजीब होगा कि आपको उस दुर्लभ दिन पर काम करना होगा जिसे आपको यह जानना है कि आप इसे नहीं समझते हैं।

इसका मतलब यह नहीं है कि आपको अपने सिर में हेक्साडेसिमल संख्याओं को जोड़ने में सक्षम होना चाहिए। यह आपको नियमित रूप से जोड़ने के लिए नियमों पर खिलवाड़ करना शुरू कर देता है यदि आप वैसे भी करते हैं। :)


0

बाइनरी, हेक्स और ऑक्टल में जो कुछ भी है वह यह नहीं है कि वे बेस 10 नहीं हैं, लेकिन यह कि वे दो की सभी शक्तियां हैं। चूंकि कंप्यूटर स्वाभाविक रूप से द्विआधारी हैं, इससे उनमें से प्रत्येक को कुछ एप्लिकेशन मिलते हैं जहां वे डेटा को प्रदर्शित करने और उससे निपटने का सबसे उपयुक्त या कुशल तरीका हैं।

यह तब बहुत महत्वपूर्ण हुआ करता था, जब सभी प्रोग्रामिंग निम्न स्तर की थी। आज की उच्च स्तरीय प्रोग्रामिंग में, पावर-ऑफ -2 नंबर सिस्टम बहुत कम महत्वपूर्ण हैं। हर प्रोग्रामिंग कोर्स में उनका गहन परिचय होना पुराने दिनों का एक अवशेष हो सकता है।

लेकिन ये नंबर सिस्टम अभी भी उनके उपयोग के हैं, तब भी जब आप उच्च-स्तरीय भाषाओं में काम करते हैं। रंग, उदाहरण के लिए, अभी भी 24 बिट्स, 8 बिट्स प्रति प्राथमिक रंग में संग्रहीत किया जाता है। और चूंकि हेक्साडेसिमल मानव-पठनीय तरीके से बाइट का प्रतिनिधित्व करने का सबसे अच्छा तरीका है, यह सीएसएस का भी हिस्सा है, जिसे उन लोगों द्वारा उपयोग करने योग्य माना जाता है जिनके पास प्रोग्रामिंग के लिए कभी परिचय नहीं था।

आप बाइनरी को समझे बिना कंप्यूटर को नहीं समझ सकते। बाइनरी का एक परिचय प्रोग्रामिंग के लिए पूरी तरह से परिचय का एक आवश्यक हिस्सा है। आपको रोजमर्रा के काम में संख्या प्रणालियों के बीच बहुत अधिक रूपांतरण करने की आवश्यकता नहीं हो सकती है, लेकिन इस तरह के व्यायाम करना वास्तव में इन संख्या प्रणालियों से परिचित होने का एकमात्र तरीका है। एक से अधिक गैर-आधार 10-संख्या प्रणाली को जानना ठीक से समझने का एकमात्र तरीका है, उस डेटा को कई तरीकों से दर्शाया जा सकता है, जो सभी मान्य हैं।

  • जैसा कि जॉन वॉन न्यूमैन ने कहा: "[..] हम चीजों को नहीं समझते हैं, हमें उनकी आदत है।"

0

मुझे लगता है कि एक आधार से दूसरे आधार पर रूपांतरण प्रोग्रामिंग के लिए बहुत महत्वपूर्ण नहीं है। उच्च स्तरीय प्रोग्रामिंग में आपको रूपांतरणों की आवश्यकता नहीं है (और क्या आप कभी ऐसा कर सकते हैं, काम के कार्य और कैलकुलेटर उपलब्ध हैं।) जब आप निचले स्तर की प्रोग्रामिंग में गोता लगाते हैं, तो आप अब किसी परिचयात्मक पाठ्यक्रम में नहीं हैं।

मुझे लगता है कि मूल बातें पाठ्यक्रम में शामिल करने के लिए दो (संबंधित) मुद्दे महत्वपूर्ण हैं।

  1. एन्कोडिंग के बारे में। यह गणितीय रूपांतरण के बारे में नहीं है, बल्कि जानकारी (किसी भी प्रकार की जानकारी) को संग्रहीत करने के लिए संख्याओं (किसी भी प्रकार की संख्या) का उपयोग करने के बारे में है। यदि आप चाहते हैं, तो आप इसे नंबरों के साथ मोर्स कोड या पेंट के साथ चित्रित कर सकते हैं। लेकिन चूंकि कंप्यूटर बाइनरी का उपयोग करते हैं और बाइनरी को आमतौर पर हेक्स के रूप में प्रदर्शित किया जाता है, इसलिए आमतौर पर हाइक्स उदाहरणों के साथ चीजों को चित्रित किया जाता है। (और, जब वे इस पर होते हैं, तो वे लाइन एंडिंग के बारे में थोड़ा समझा सकते हैं, जो इस विषय में उल्लेख किया गया है। मैं केवल विभिन्न आकारों और रूपों को पहचानने की सलाह दूंगा, जिनमें से कुछ 0x0D, 0x0A हैं। , CRLF, '\ n' और 'r')

  2. अतिप्रवाह मुद्दों। एक बार फिर, हेक्स के साथ यह स्पष्ट करने की आवश्यकता नहीं है। आप y2k उदाहरण का उपयोग कर सकते हैं (जिसका हेक्सा के साथ कोई लेना-देना नहीं था) यहां भी मैं सिर्फ विभिन्न संभावित संकेतकों (255, 32767, 65535, 2M14) को पहचानने की सलाह दूंगा कि वे संकेतक सीधे बाइट प्रकृति से क्यों जुड़े हैं। आंतरिक संग्रहण, लेकिन रूपांतरण महत्वपूर्ण हिस्सा नहीं है।

मैं असहमत हूं कि आपको इसे बिटफ्लैग के लिए जानने की आवश्यकता है (क्योंकि प्रोग्रामिंग के एक परिचय पाठ्यक्रम में, नामित स्थिरांक बहुत अधिक अनुदेशात्मक और उपयोगी हैं।)


0

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

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