स्वाभाविक रूप से गिनती शून्य पर शुरू होती है
यहाँ एक टोकरी में सेब की गिनती के लिए एल्गोरिथ्म है:
count := 0
for each apple in basket
count := count + 1
उपरोक्त के निष्पादन के बाद, count
सेब की संख्या रखती है। यह शून्य हो सकता है, क्योंकि बास्केट खाली हो सकते हैं।
यदि आप पूरे महीने के लिए अपने क्रेडिट कार्ड का उपयोग नहीं करते हैं, तो क्या आपको 1 डॉलर का बिल मिलता है? या 1 प्रतिशत?
जब आप अपनी कार के ओडोमीटर पर ट्रिप मीटर को रीसेट करते हैं, तो क्या यह 0001 या 0000 पर जाता है?
Arrays एक ही डेटा के कई दृश्य प्रदान कर सकता है
32 बिट संरचनाओं की एक सरणी पर विचार करें d
, जो प्रत्येक 16 बिट शब्दों से बने हैं w
। प्रत्येक शब्द दो 8 बिट बाइट्स से बना है b
। शून्य अनुक्रमण के तहत, ओवरले बहुत सुविधाजनक लगता है:
d: | 0 | 1 |
w: | 0 | 1 | 2 | 3 |
b: |0|1|2|3|4|5|6|7|
d[1]
शब्द पते पर 32 बिट ऑब्जेक्ट w[2]
जो आसानी से 2 से सूचकांक गुणा करके गणना की जाती है, जो कि 32 और 16 बिट ऑब्जेक्ट के आकार का अनुपात है। इसके अलावा, बाइट संबोधन में, यह है b[4]
।
यह काम करता है क्योंकि माप की प्रत्येक इकाई में शून्य शून्य है: बाइट, शब्द, दोहरा शब्द और इसी तरह।
उपरोक्त आरेख को देखें: यह एक शासक की तरह दिखता है, जहां इकाई रूपांतरण सहज होते हैं।
एक आधारित अनुक्रमण के साथ, यह टूट जाता है:
d: | 1 | 2 |
w: | 1 | 2 | 3 | 4 |
b: |1|2|3|4|5|6|7|8|
अब हम d
सूचकांक प्राप्त करने के लिए सूचकांक को 2 से गुणा नहीं कर सकते हैं w
, या b
सूचकांक प्राप्त करने के लिए 4 से बढ़ा सकते हैं । इकाइयों के बीच रूपांतरण अनाड़ी हो जाता है। उदाहरण के लिए से जाने के d[2]
लिए b[4]
, हमें गणना करनी होगी ((2 - 1) * 4) + 1 = 5
।
हमें d
इकाइयों में उस pesky 1 पूर्वाग्रह को घटाना होगा , फिर प्राकृतिक शून्य-आधारित समन्वय प्रणाली में स्केलिंग करना होगा, और फिर b
इकाइयों में pesky 1 को वापस जोड़ना होगा । ध्यान दें कि यह वही 1 नहीं है! हम एक डबल शब्द चौड़ाई घटाते हैं, लेकिन फिर एक बाइट चौड़ाई में जोड़ते हैं ।
डेटा के विभिन्न विचारों के बीच परिवर्तित करना सेल्सियस-फ़ारेनहाइट रूपांतरण की तरह कुछ हो जाता है।
जो लोग कहते हैं कि कार्यान्वयन के स्तर पर एक-आधारित सरणियों से निपटना आसान है, क्योंकि केवल 1 का एक सरल घटाव खुद को बेवकूफ बना रहा है, और आप। यह केवल तभी सच है जब हम विभिन्न डेटा प्रकारों के बीच कोई स्केलिंग गणना नहीं करते हैं। ऐसी गणना किसी भी कार्यक्रम में होती है जिसमें डेटा पर एक लचीला दृष्टिकोण होता है (जैसे कि एक बहुआयामी सरणी भी एक आयामी एक के रूप में एक्सेस किया जाता है) या जो भंडारण में हेरफेर करता है: उदाहरण के लिए, एक मेमोरी एलोकेटर, फाइल सिस्टम, या वीडियो फ्रेम बफर लाइब्रेरी।
अंकों को न्यूनतम करना
किसी भी आधार में, यदि हम कुछ मानों का उपयोग करना चाहते हैं तो मूल्यों की एक श्रृंखला को लागू करने के लिए जो आधार की शक्ति है, हमें शून्य से शुरू करना चाहिए। उदाहरण के लिए, बेस दस में, तीन अंक हमें 0 से 999 तक एक हजार अलग-अलग मान देने के लिए पर्याप्त हैं। यदि हम 1 से शुरू करते हैं, तो हम केवल एक मान से ओवरफ्लो करते हैं, और हमें चार अंकों की आवश्यकता होती है।
यह कंप्यूटर में महत्वपूर्ण है, क्योंकि बाइनरी में अंकों की संख्या हार्डवेयर पता लाइनों में बदल जाती है। उदाहरण के लिए, इसमें 256 शब्दों वाली एक ROM चिप को 0 से 255 तक संबोधित किया जा सकता है, जिसके लिए 8 बिट्स की आवश्यकता होती है: 00000000 से 11111111। यदि इसे 1 से 256 तक संबोधित किया जाता है, तो नौ बिट्स की आवश्यकता होती है। हमें सर्किट बोर्ड या इंटीग्रेटेड सर्किट में एक से अधिक एड्रेस ट्रेस को बेकार में जोड़ना होगा। तो व्यवहार में संभवतः ऐसा क्या होगा कि 0 बस कहा जाएगाउस चिप तक पहुँचने के लिए सॉफ्टवेयर एपीआई स्तर पर 1। शब्द 1 के लिए एक अनुरोध वास्तव में 8 बिट एड्रेस बस पर 00000000 डाला जाएगा। या फिर, 1 के लिए एक अनुरोध 00000001 पते पर अनुवाद करेगा, जैसा कि अपेक्षित था, लेकिन 256 के लिए एक अनुरोध 9 बिट पते 100000000 के बजाय अन्यथा अप्रयुक्त 8 बिट पते 00000000 के लिए मैप करेगा। इन दोनों बैग-काटने वाले कीचड़ वास्तव में समाधान हैं एक समस्या की खोज , और हार्डवेयर में, सॉफ्टवेयर में और सभी उपयोगकर्ता इंटरफेस और प्रलेखन में लगातार 0 से 255 का उपयोग करके पूरी तरह से बचा जाता है।
एक-आधारित विस्थापन मौलिक रूप से बेवकूफ हैं
उदाहरण के लिए पश्चिमी संगीत सिद्धांत पर विचार करें। हमारे पास सात नोटों के साथ डायटोनिक तराजू हैं, लेकिन हम उस स्थान को कहते हैं जिसे वे एक सप्तक को कवर करते हैं ! अंतराल का उलटा तो नौ के नियम का पालन करता है : उदाहरण के लिए तीसरे का उलटा एक छठा है (नौ से तीन घटाएँ)। तो तीन अलग-अलग संख्याएं कुछ सरल के लिए खेलती हैं: सात (एक पैमाने में नोट), आठ (सप्तक) और नौ (इनवर्ट से घटाना)।
यदि सात नोटों में सेप्टेव या हेप्टेव बनाया जाता है, और अंतराल शून्य आधारित होते हैं, तो हम सात से उल्टे को घटाएंगे। सात पर आधारित सब कुछ।
इसके अलावा, अंतराल आसानी से खड़ी हो सकती है। वर्तमान प्रणाली में, यदि हम पाँचवें और फिर चौथे से फिर छलांग लगाते हैं, और फिर एक तिहाई करके, हम इन्हें जोड़ नहीं सकते हैं। परिणामी अंतराल दो कम है। यह एक गोधूलि नहीं है, लेकिन वास्तव में दसवां है! प्रत्येक चरण में, हमें एक को घटाना होगा। एक पांचवें और फिर एक चौथे से ऊपर जाना एक नौवां नहीं है, लेकिन केवल एक सप्तक है।
पूरी तरह से डिज़ाइन की गई संगीत प्रणाली में, हम परिणामी छलांग निर्धारित करने के लिए केवल अंतराल जोड़ सकते हैं। नोटों का एक क्रम जो एक ही नोट पर शुरू और समाप्त होता है, फिर एक सर्किट के चारों ओर वोल्टेज कानून के समान एक संपत्ति होगी: सभी अंतराल शून्य में जोड़ देंगे।
संगीत सिद्धांत और लेखन बुरी तरह से पुराना है। अधिकांश यह तब से नहीं बदला है जब से एक मोमबत्ती की रोशनी से क्विल पेन के साथ कम्पोजिंग की गई थी।
एक-आधारित सिस्टम उन्हीं लोगों को भ्रमित करता है जो शून्य-आधारित सरणियों को संभाल नहीं सकते हैं
जब वर्ष 2000 घूमने लगा, तो कई लोगों को भ्रम हुआ कि नई सहस्राब्दी की शुरुआत क्यों नहीं हुई। वे बताते हैं कि यह 2001 तक शुरू नहीं होगा जब तक कि पार्टी के शिकारियों और dweebs के रूप में नहीं माना जाता था। आखिरकार, आप अपने 20 साल के हो गए, जब आप 20 वर्ष के हो गए, ठीक है? जब आप 21 वर्ष के हो जाते हैं तो नहीं। यदि आपको लगता है कि सहस्राब्दी 1 जनवरी 2000 को शुरू हुआ है, तो आपको किसी भी प्रोग्रामिंग भाषा में शून्य आधारित सरणियों के बारे में शिकायत करने का कोई अधिकार नहीं है। वे काम करते हैं कि आप कैसे पसंद करते हैं। (लेकिन, हाँ, एक-आधारित विस्थापन और सरणियों के प्रस्तावक dweebs और पार्टी-कवि हैं। शताब्दी XXX वर्ष पर शुरू होनी चाहिए, और X000 वर्ष पर सहस्राब्दी।)
कैलेंडर गूंगे हैं, लेकिन दिन का कम से कम समय शून्य आधारित है
आपकी घड़ी में प्रत्येक नया मिनट: 00 सेकंड से शुरू होता है। प्रत्येक नया घंटा 00:00 मिनट और सेकंड से शुरू होता है। और, कम से कम एक 24 घंटे की घड़ी में, दिन लगभग आधी रात और 11:59:59 से 00:00:00 तक बढ़ जाता है।
इस प्रकार यदि आप 13:53:04 जैसे समय के लिए आधी रात से सेकंड की गणना करना चाहते हैं, तो आपको बस मूल्यांकन करना होगा 13 * 3600 + 53 * 60 + 4
। कोई भी 1
जोड़ या घटाव नहीं।
मिडी के बारे में शेख़ी बंद
ठीक है, यह संगीतकारों के साथ क्या है, यहां तक कि कथित तौर पर तकनीकी वाले?
मिडी! यह संदेशों के वास्तविक तार प्रतिनिधित्व में कार्यक्रमों और चैनलों के लिए शून्य-आधारित नंबरिंग का उपयोग करता है, लेकिन गियर इसे 1 आधारित के रूप में प्रदर्शित करता है! उदाहरण के लिए प्रोग्राम 0 से 127 को अधिकांश गियर पर 1 से 128 कहा जाता है, लेकिन कुछ उन्हें 0 से 127 पर कॉल करते हैं या उपयोगकर्ता को विकल्प भी देते हैं।
80 के माध्यम से 71 कार्यक्रम दस का "बैंक" माना जाता है। उदाहरण के लिए, यह मेरे मिडी पेडल पर सही कहता है। फ़ुटस्विच को 1 से 10 तक लेबल किया जाता है और अगर मैं सातवें बैंक में हूं, तो वे 80 के माध्यम से 71 प्रोग्राम लेते हैं। हालांकि, कुछ डिवाइस या कंप्यूटर सॉफ़्टवेयर 1-128 प्रोग्राम नंबर को 0 से 127 तक प्रदर्शित करते हैं, या उपयोगकर्ता को एक भी देता है पसंद! क्या बुरा है: एक-आधारित प्रणाली, या अराजकता एक ही समय में एक और शून्य दोनों का उपयोग करके बनाई गई?
मिडी चैनल संख्याओं को 1 से 16 कहा जाता है, लेकिन 0 से 15 बाइनरी द्वारा दर्शाया जाता है। जैसे कि एक-आधारित प्रस्तुति के बावजूद, कुछ गियर चैनल नंबर को कॉन्फ़िगर करने के लिए एक डिस्सिविच का उपयोग करते हैं और, अक्सर, thes स्विच सिर्फ शून्य आधारित बाइनरी कोड का उपयोग करते हैं। इसलिए यदि आप चैनल 3 चाहते हैं, तो आपको इसे 0010 (बाइनरी 2) पर टॉगल करना होगा।