शून्य-आधारित महीना नंबरिंग [बंद]


98

कुछ लोकप्रिय प्रोग्रामिंग भाषाएं महीने की संख्या का उपयोग करती हैं जो 1 से बंद है - जावा के अनुसार जावास्क्रिप्ट दिमाग में आता है, और यदि स्मृति कार्य करती है, तो सी एक और है। मेरे कुछ सवाल है:

  • यदि आप लेपियों द्वारा उपयोग की जाने वाली महीने की संख्या को अनदेखा करने जा रहे हैं, तो सुसंगतता के लिए भी दिन क्यों नहीं है laypeople द्वारा उपयोग किए जाने नंबरिंग को , और 0 से शुरू होने वाले प्रत्येक महीने में दिनों की संख्या?
  • यह इतना आम क्यों है?
  • यह किसका विचार था?

Arrays, 0 से शुरू होता है, और लोग दिनों को संख्याओं से संदर्भित करते हैं?
ग्लासस

13
@TomatoSandwich: अक्सर लोग महीनों को संख्याओं से संदर्भित करते हैं , और वे उन्हें 1 से शुरू करते हैं ।
रॉबर्ट एल

2
एपीआई प्रोग्रामर रास्ते से देवता नहीं हैं; कभी-कभी गलतियों को क्रियान्वयन में मिलता है; बस उसके साथ निपटो। ऐसा नहीं है कि यह वास्तव में एक मामला है (आप यह भी नहीं जानते कि कौन सी भाषा है), लेकिन सब कुछ सही होने की उम्मीद न करें। मैं हालांकि कारण जानना चाहता हूं।
दोपहर रेशम

5
जापान में, वे केवल संख्या का उपयोग करते हैं। वे जनवरी, फरवरी, आदि का उपयोग नहीं करते हैं। पश्चिमी दुनिया भी संख्याओं का बहुत बार उपयोग करती है। मुझे उम्मीद है कि वे कभी भी एक और प्रोग्रामिंग भाषा नहीं बनाते हैं, जो फिर से बोली जाने वाली भाषा शैली पर सरणी शैली चुनता है। यह किसी ऐसी चीज़ के लिए एक सरल समाधान है जिसका उपयोग लाखों बार किया जा रहा है।
वोल्फपैक'08

1
सहमत हैं, जबकि फांसी का अपराध नहीं है, जिसने भी ऐसा किया है उसने मेरा सिर्फ दस मिनट का समय बर्बाद किया है और एक मध्यम आकार की गीली मछली के साथ एक थप्पड़ का हकदार है।
जेम्स मैककॉर्मैक

जवाबों:


53

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

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

और शून्य-आधारित महीने की संख्या? अक्सर, कई प्रोग्रामिंग वातावरण कुछ डिफ़ॉल्ट डेटा के बाद से कई दिनों तक डेटा की गणना करते हैं। 31 दिसंबर, 1899 एक लोकप्रिय तारीख है, हालांकि आधार तिथि के रूप में अन्य बहुत सारी तारीखों का उपयोग किया गया है। अन्य सभी तिथियां इस आधार से ऑफसेट हैं, और इसे केवल एक ही संख्या के रूप में संग्रहीत किया जाएगा। फ्रैक्चर का उपयोग घंटे, मिनट और सेकंड को इंगित करने के लिए किया जाएगा, जहां 0.25 24/4 = 6 घंटे होगा। इस प्रकार, किसी तिथि को वास्तविक तिथि में बदलने के लिए, सभी पर्यावरण को इस संख्या को वास्तविक तिथि में बदलना होगा।

हालाँकि, शून्य-आधारित सरणियों और 1-आधारित महीने के मूल्यों का संयोजन एक समस्या लाता है। महीने का नाम 9 प्राप्त करने के लिए, आपको महीने के सरणी से आइटम 8 प्राप्त करना होगा। कुछ डेवलपर्स नाम होने से पहले महीने की संख्या कम होने से खुश होंगे। दूसरों ने महीने को कुछ शून्य-आधारित में बदलना पसंद किया क्योंकि लोग केवल नाम जानना चाहते हैं, संख्या नहीं। यह एक निजी विचार है।


92
जावास्क्रिप्ट और AS3 डेट कंस्ट्रक्टर हर महीने "छोड़कर" हर चीज के लिए वास्तविक मूल्य लेते हैं, जो अज्ञात कारण से शून्य-आधारित के रूप में निर्दिष्ट किया जाना चाहिए। यह निर्विवाद रूप से एक भयानक एपीआई डिजाइन है।
२४:१४ बजे त्रिकोको

3
मैं सहमत हूँ। इससे मुझे यह जानने में एक घंटे का समय लगा कि मेरी तारीख एक महीने की क्यों थी। यह वास्तव में सब कुछ के लिए बहुत मायने नहीं रखता है 1 महीने को छोड़कर। दुर्भाग्य से, शायद यह अक्षम्य है, अन्यथा हम एक और Y2K समस्या के साथ समाप्त होते हैं :-)।
माइक सोना

1
Tl; dr: सरणी देखने के कारण monthName[monthNumber]या time.h संकेतन केmon_name[tm_mon] साथ ।
पर्सिसेस

XOR-with-own चीज थोड़ी लाल हेरिंग है; यह एक इंटेल की बात है। अन्य MPU में रजिस्टरों को शून्य करने के अन्य तरीके थे; कुछ के पास उन्हें 1 पर सेट करने के कुशल तरीके थे। शून्य-आधारित चीजों का मुख्य कारण सूचकांक गणना है; कभी-कभी वे अंकगणित के लिए भी उपयोगी होते हैं।
एलेस्टेयर

6

यह वह है जो है, और उस अनुमान के लिए बनाए गए सॉफ़्टवेयर के विशाल वजन का मतलब है कि यह थोड़ी देर के लिए रहने वाला है।

मेरी राय है कि यह सी की गलती थी, और उन सभी अन्य जॉनी-आ-हाल ही में भाषाओं ने इसके अनुरूप किया।

आपको ऐसे लोगों से कुछ मज़ेदार परिस्थितियाँ मिलती हैं जो बेहतर नहीं जानते हैं। हमारी टीम को मिली कुछ Y2K बग्स में से एक वेब साइट थी जिसे गर्व से इस वर्ष घोषित किया गया था कि वह 19100 थी, क्योंकि उन्होंने इस struct tmवर्ष को "19" के रूप में प्रस्तुत किया था।


कम से कम एक व्यक्ति (मुझे नहीं) ने अपनी लिपियों में उपयोग के लिए "getRealMonth" और "setRealMonth" कार्यों को परिभाषित किया था। मैं उसे एक सा दोष नहीं देता।
रॉबर्ट एल

1
Y2K बग संदर्भ के लिए अद्यतन करें।
Justus Romijn

4

हां, रोमनों को शून्य के साथ भी समस्याएं थीं।

यह सिर्फ गणित का एक [गैर-सहज] परिणाम है (प्रोग्रामिंग का एक मजबूत घटक, विशेष रूप से शुरुआती प्रोग्रामिंग) शून्य को पहले (समस्यात्मक शब्द के रूप में परिभाषित करता है) वास्तविक, सकारात्मक * प्राकृतिक संख्या के , और चूंकि एक सरणी वास्तविक के साथ अनुक्रमित होती है , प्राकृतिक संख्या "प्रथम" तत्व इंडेक्स 0 पर है।

महीनों को वास्तव में एक सरणी में मान नाम दिया जाता है, जहां दिन और वर्ष गिने जाते हैं - यह शायद उन दिनों / वर्षों के बारे में सोचने के लिए अधिक उपयोगी होगा जो सरणियों में होते हैं जो {"1", "2", "3" जैसे दिखते हैं। ..} स्व।

जैसे कि यह इतना सामान्य क्यों है (गणितीय रूप से सही होने के अलावा) अच्छी तरह से सूचीबद्ध सभी भाषाएं जो एक सामान्य भाषा से एक दूसरे के लिए उतरती हैं ...

संपादित करें:

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

ऐसा लगता है कि प्रचलित राय या तो "ऐतिहासिक दुर्घटना" है या "क्योंकि महीनों की संख्या नहीं है, इसलिए दिन / वर्ष के भंडारण की तुलना नहीं की जा सकती है" जो आप पूछते हैं उसके आधार पर।

* सॉरी, सॉरी, फिजिक्स! = गणित मुझे वहां काटने के लिए वापस आ रहा है। मेरे हाथों को अब लोहे से।


5
शून्य एक सकारात्मक संख्या नहीं है। यह भी एक ऋणात्मक संख्या नहीं है।
रॉबर्ट एल

अच्छा बिंदु, शायद आपको इसे "प्राकृतिक संख्या" में बदलना चाहिए।
paxdiablo

1
दिलचस्प है, मैंने हमेशा सोचा था कि सी सरणियों को सूचक अंकगणित को सरल बनाने के लिए 0 पर शुरू होता है: a[0]== *(a + 0)
बहुत ज्यादा php

2
दरअसल, कंप्यूटिंग में, आप एक सकारात्मक और नकारात्मक शून्य हो सकते हैं यदि आप ओनेस पूरक प्रणाली का उपयोग करते हैं। सौभाग्य से, उस प्रणाली का लगभग फिर कभी उपयोग नहीं किया जाता है। देखें en.wikipedia.org/wiki/Ones'_complement#Ones.27_complement
विम दस कगार

महीना एक संख्या के साथ-साथ हमारी संस्कृति का भी दिन है। एक वर्ष में पहला महीना वास्तव में "1 (सेंट) महीना" कहा जाता है, और अंतिम "12 (वें) महीना" कहा जाता है
माइकल त्सांग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.