यह डेटा संग्रहीत करने के तरीके की बात है। सैम के साथ आपकी बातचीत बेहतर तुलना करेगी यदि आप पूछ रहे हैं तो आप इसे लिख सकते हैं, लेकिन केवल आठ अक्षरों का मूल्य था।
"सैम, मुझे फोननंबर दे दो।"
"5555555555"
"ओह नहीं मैं कागज से बाहर हूँ। यदि केवल मैं समय से पहले ही जानता था कि मैं कितना डेटा मांग रहा था तो मैं बेहतर तैयारी कर सकता था!"
इसलिए इसके बजाय, अधिकांश भाषाएं आपको एक प्रकार का घोषित करती हैं, इसलिए यह समय से पहले पता चलेगा और तैयार करेगा:
"सैम, कब तक एक टेलीफोन नंबर है?"
"दस अक्षर।"
"ठीक है, फिर मुझे कागज का एक बड़ा टुकड़ा दे दो। अब मुझे फोननंबर दे दो।"
"5555555555"
"समझ गया! धन्यवाद सैम!"
जब आप डेटा को संग्रहित करने वाले वास्तविक मूलभूत तरीकों को देखते हैं तो यह और भी अधिक बालों वाला हो जाता है। यदि आप मेरे जैसे हैं, तो आपके पास विविध नोटों के साथ एक नोटबुक है, संख्याएँ केवल नीचे लिखी हुई हैं, कोई संदर्भ या किसी भी चीज़ के लिए लेबलिंग नहीं है, और आपको कोई सुराग नहीं है कि तीन दिनों के बाद इसका क्या मतलब है। यह कई बार कंप्यूटर के लिए भी एक समस्या है। बहुत सी भाषाओं में "int" प्रकार (int, long, short, byte) और "float" (फ्लोट, डबल) प्रकार होते हैं। ऐसा क्यों जरूरी है?
खैर पहले देखते हैं कि एक पूर्णांक कैसे संग्रहीत किया जाता है, और आम तौर पर कंप्यूटर के भीतर प्रतिनिधित्व किया जाता है। आप शायद जानते हैं कि बुनियादी स्तर पर, यह सभी द्विआधारी (1 और 0) है। बाइनरी वास्तव में एक संख्या प्रणाली है जो हमारे दशमलव संख्या प्रणाली की तरह ही काम करती है। दशमलव में, आप 0 से 9 तक गिनती करते हैं (अनंत निहित अग्रणी शून्य जो आप नहीं लिखते हैं) के साथ, फिर आप वापस 0 पर रोल करते हैं और अगले अंक को बढ़ाते हैं ताकि आपके पास 10. हो। आप 19 से 20 तक रोल करने तक दोहराते हैं, जब तक आप 99 से 100 तक रोल नहीं करते तब तक दोहराएं।
बाइनरी अलग नहीं है, सिवाय इसके कि 0 से 9 के बजाय, आप 0 से 1. 0, 1, 10, 11, 100, 101, 110, 111, 1000 तक गिनती करते हैं। इसलिए जब आप 9 में टाइप करते हैं, तो मेमोरी बाइनरी में दर्ज होती है। as 1001. यह एक वास्तविक संख्या है। यह जोड़ा जा सकता है, घटाया, गुणा, आदि, बिल्कुल उस रूप में। 10 + 1 = 11. 10 + 10 = 100 (1 से 0 पर रोल करें और 1 ले जाएं)। 11 x 10 = 110 (और समतुल्य, 11 + 11 = 110)।
अब वास्तविक मेमोरी में (रजिस्टरों में शामिल), एक सूची है, सरणी, जो भी आप इसे कॉल करना चाहते हैं, बिट्स की (संभावित 1 या 0 ') एक दूसरे के ठीक बगल में, जो है कि यह कैसे इन बिट्स को तार्किक रूप से संगठित करने के लिए रखता है संख्या 1. से अधिक है। समस्या यह है कि आप दशमलव के साथ क्या करते हैं? आप रजिस्टर में दो बिट्स के बीच सिर्फ हार्डवेयर का एक टुकड़ा नहीं डाल सकते हैं, और बिट्स की प्रत्येक जोड़ी के बीच "दशमलव बिट्स" जोड़ने के लिए बहुत अधिक लागत आएगी। इसलिए क्या करना है?
आप इसे एनकोड करें। आम तौर पर, सीपीयू या सॉफ्टवेयर की वास्तुकला यह निर्धारित करेगी कि यह कैसे किया जाता है, लेकिन रजिस्टर के पहले बिट में एक चिह्न (+ या -, आमतौर पर 1 नकारात्मक है) संग्रहीत करने के लिए एक सामान्य तरीका एक मंटिसा (आपका नंबर स्थानांतरित) है हालाँकि, कई बार बिट्स की निम्न X संख्या के लिए दशमलव से छुटकारा पाना आवश्यक होता है, और शेष के लिए एक घातांक (जितनी बार आपको इसे शिफ्ट करना होता है)। यह वैज्ञानिक संकेतन के समान है।
टाइपिंग कंपाइलर को यह जानने की अनुमति देता है कि वह क्या देख रहा है। कल्पना कीजिए कि आपने रजिस्टर १ में १.३ का मान जमा किया है। हम यहाँ अपनी स्वयं की फैंसी एन्कोडिंग योजना के साथ आएंगे, साइन के लिए १ बिट, मंटिसा के लिए ४, एक्सप्रेटर के लिए ३ (साइन के लिए १ बिट, परिमाण के लिए २)। यह एक सकारात्मक संख्या है, इसलिए संकेत सकारात्मक है (0)। हमारा मंटिसा 13 (1101) होगा और हमारा प्रतिपादक -1 (101 नकारात्मक के लिए 1, 01 = 1) होगा। इसलिए हम रजिस्टर में 01101101 स्टोर करते हैं। अब हमने इस वेरिएबल को टाइप नहीं किया है, इसलिए जब रनटाइम इसका उपयोग करने के लिए जाता है, तो यह कहता है "निश्चित रूप से, यह एक पूर्णांक क्यों है" इसलिए नहीं जब यह मूल्य को देखता है तो हम 109 (64 +) देखते हैं 32 + 8 + 4 + 1), जो स्पष्ट रूप से सही नहीं है।
हालांकि, हर भाषा आपको स्पष्ट रूप से टाइप करने की आवश्यकता नहीं है। C # में एक कीवर्ड "var" होता है जिसके कारण एक चर का प्रकार संकलन समय पर व्याख्यायित होता है, और जावास्क्रिप्ट जैसी अन्य भाषाएं पूरी तरह से गतिशील रूप से टाइप की जाती हैं, इस बिंदु पर कि आप किसी चर में एक पूर्णांक स्टोर कर सकते हैं, फिर इसे बूलियन पर असाइन कर सकते हैं, फिर इसे फिर से एक स्ट्रिंग पर असाइन करें और भाषा सभी को ट्रैक करती है।
लेकिन यह संकलक, दुभाषिया, या रनटाइम पर बहुत आसान है - और अक्सर एक तेज कार्यक्रम में परिणाम होता है क्योंकि इसमें हर चीज के टाइपिंग के माध्यम से छंटनी वाले मूल्यवान संसाधन खर्च नहीं करने होते हैं - आपसे, प्रोग्रामर, यह पूछने के लिए कि किस तरह का डेटा आप दे रहे हैं।