मैजिक नंबर (प्रोग्रामिंग)

कंप्यूटर प्रोग्रामिंग में, मैजिक नंबर निम्न में से कोई एक होता है:


 * अस्पष्टीकृत अर्थ या एक से अधिक घटनाओं वाला एक विशेष मान जिसे (अधिमानतः) नामित स्थिरांक के साथ परिवर्तित किया जा सकता है।
 * फ़ाइलों के लिए, फ़ाइल प्रारूप या प्रोटोकॉल की पहचान करने के लिए एक निरंतर संख्यात्मक या मूल तालिका के मान का उपयोग किया जाता है, फ़ाइल हस्ताक्षरों की सूची देखें।
 * एक विशिष्ट अद्वितीय मान जो दूसरे अर्थों के लिए गलत होने की संभावना नहीं है (उदाहरण के लिए, वैश्विक अनन्य पहचान)

अज्ञात संख्यात्मक स्थिरांक
मैजिक नंबर या मैजिक स्थिरांक शब्द सीधे स्रोत कोड में संख्याओं का उपयोग करने के एंटी पैटर्न को संदर्भित करता है। इसे प्रोग्रामिंग के सबसे प्राचीन नियमों में से एक को खंडित करने के रूप में संदर्भित किया गया है, जो 1960 के कोबोल, फोरट्रान और पी एल/1 नियमावली के समय से है। कोड में अज्ञात मैजिक संख्यों का उपयोग विकासकर्ताओं के उस संख्या को चुनने के उद्देस्य को अस्पष्ट करता है, सूक्ष्म त्रुटियों के अवसरों को बढ़ाता है (जैसे 3.14159265358979323846 में प्रत्येक अंक सही है और क्या यह 3.14159 के बराबर है?) और भविष्य में कार्यक्रम को अनुकूलित और विस्तारित करने के लिए इसे और अधिक कठिन बना देता है। सभी महत्वपूर्ण मैजिक संख्याओं को नामांकित स्थिरांक (प्रोग्रामिंग) (व्याख्यात्मक चर भी कहा जाता है) के साथ बदलने से प्रोग्राम को पढ़ना, समझना और बनाए रखना आसान हो जाता है। प्रोग्रामिंग के संदर्भ में सार्थक होने के लिए चुने गए नामों का परिणाम कोड में हो सकता है जो एक रखरखावकर्ता द्वारा आसानी से समझा जा सकता है जो मूल लेखक नहीं है (या कुछ समय के बाद मूल लेखक के द्वारा भी)। एक अनौपचारिक रूप से नामित स्थिरांक का एक उदाहरण है, जबकि   अधिक वर्णनात्मक है।

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

उदाहरण के लिए, यदि ताश के पत्तों के एक मानक पैक का प्रतिनिधित्व करने वाले सरणी में मानों को अस्त व्यस्त प्रकार से परिवर्तन करने की आवश्यकता होती है, तो यह स्यूडोकोड फिशर-येट्स शफल एल्गोरिथम का उपयोग करके काम करता है:

मैं 1 से 52 के लिए j := i + randomInt(53 - i) - 1 a.swapEntries (i, j)

जहा  एक सरणी वस्तु है, function   1 और x, समावेशी के बीच एक यादृच्छिक पूर्णांक चुनता है   सरणी में iवें और jवें प्रविष्टियों में परिवर्तन करता है। पिछले उदाहरण में,   एक मैजिक संख्या है। निम्नलिखित लिखने के लिए इसे अच्छी प्रोग्रामिंग विधि माना जाता है:

constant int deckSize := 52 for i from 1 to deckSize j := i + randomInt(deckSize + 1 - i) - 1 a.swapEntries (i, j)

यह कई कारणों से अधिक उपयुक्त है :


 * इसे पढ़ना और समझना आसान है। पहला उदाहरण पढ़ने वाला एक प्रोग्रामर आश्चर्यचकित हो सकता है, "संख्या 52 का यहाँ क्या अर्थ है? 52 क्यों? प्रोग्रामर कोड को ध्यान से पढ़ने के बाद अर्थ का अनुमान लगा सकता है, लेकिन यह स्पष्ट नहीं है। मैजिक संख्या विशेष रूप से अस्पस्ट हो जाती है जब एक ही संख्या कोड के एक खंड में विभिन्न उद्देश्यों के लिए उपयोग की जाती है।
 * संख्या के मान को बदलना आसान है, क्योंकि यह बनावटी नहीं है। मैजिक संख्या के मान को बदलना त्रुटि-प्रवण है, क्योंकि प्रोग्राम के भीतर अलग-अलग स्थानों में एक ही मान प्रायः कई बार उपयोग किया जाता है। इसके अतिरिक्त, जब शब्दार्थ की दृष्टि से दो अलग-अलग चरों या संख्याओं का मान समान होता है, तो हो सकता है कि दोनों गलती से एक साथ संपादित हो जाएं। टैरो डेक, जिसमें 78 कार्ड हैं, को शफ़ल करने के पहले उदाहरण को संशोधित करने के लिए, एक प्रोग्रामर गलती से प्रोग्रामिंग में 52 के प्रत्येक उदाहरण को 78 से बदल सकता है। इससे दो समस्याएं उत्त्पन्न होंगी। सबसे पहले, यह उदाहरण की दूसरी पंक्ति पर मान 53 को प्रदर्शित करेगा, जिससे एल्गोरिथ्म सूक्ष्म तरीके से विफल हो जाएगा। दूसरा, यह प्रत्येक जगह 52 अक्षरों को प्रतिस्थापित कर सकता है, भले ही वे डेक के आकार को संदर्भित करते हों या पूरी तरह से कुछ और, जैसे कि ग्रेगोरियन कैलेंडर वर्ष में सप्ताहों की संख्या, या अधिक परोक्ष रूप से, 1523 जैसी संख्या का हिस्सा हैं, जिनमें से सभी बग प्रदर्शित करेंगे। इसके विपरीत, के मूल्य को बदलना  दूसरे उदाहरण में चर एक सरल, एकल-पंक्ति परिवर्तन होगा।
 * यह प्रलेखन को प्रोत्साहित और सुगम बनाता है। एकल स्थान जहां नामांकित चर प्रदर्शित किया गया है, यह मान का क्या अर्थ है और इसका यह मान क्यों है के आलेखन के लिए एक अच्छा स्थान है। बहुत सारे स्थानों में समान मान होने से या तो बनावटी टिप्पणियां होती हैं (और कुछ अपडेट करते समय परिचर समस्याएं होती हैं लेकिन कुछ गायब हो जाती हैं) या कोई भी जगह नहीं छोड़ती है जहां लेखक के लिए मान की व्याख्या करना स्वाभाविक है और संभावना है कि पाठक स्पष्टीकरण की खोज करेगा।
 * मैजिक संख्या साधारणतया किसी फ़ंक्शन या फ़ाइल के शीर्ष पर, उनकी समीक्षा और परिवर्तन को सुविधाजनक बनाने के लिए चर के वर्णन के साथ रखी जाती है। * यह टाइपो का पता लगाने में सहायता करता है। एक चर (शाब्दिक के अतिरिक्त) का उपयोग करना एक संकलक की जाँच का लाभ उठाता है। टाइप करते समय गलती से 52 के बजाय 62 टाइप करने से पता नहीं चलेगा के अतिरिक्त परिणामस्वरूप संकलक की चेतावनी होगी की अवर्णित है।
 * यह कुछ एकीकृत विकास वातावरणों में टाइपिंग को कम कर सकता है। यदि कोई आई डी इ स्वतः पूर्ण # स्रोत कोड संपादकों का समर्थन करता है, तो यह पहले कुछ अक्षरों से अधिकांश चर के नाम को पूर्ण कर देता है।
 * यह मानकीकरण की सुविधा देता है। उदाहरण के लिए, उपरोक्त उदाहरण को एक ऐसी प्रक्रिया में सामान्यीकृत करने के लिए जो किसी भी कार्ड के डेक को परिवर्तित करता है, यह वापस जाने के लिए पर्याप्त होगा  उस प्रक्रिया के एक मानक में, जबकि पहले उदाहरण में कई बदलावों की आवश्यकता होगी।

फ़ंक्शन परिवर्तन (पूर्णांक डेक आकार) मैं 1 से डेक आकार के लिए j := i + randomInt(deckSize + 1 - i) - 1 a.swapEntries (i, j)

हानि:


 * जब नामित स्थिरांक को इसके उपयोग के पास परिभाषित नहीं किया जाता है, तो यह कोड की स्थानीयता और इस प्रकार बोधगम्यता को हानि पहुंचाता है। 52 को संभावित रूप से दूर के स्थान पर रखने का मतलब है कि, लूप के लिए पूरी तरह से कार्यप्रणाली को समझने के लिए (उदाहरण के लिए लूप के रन-टाइम का अनुमान लगाने के लिए), किसी को परिभाषा को जांचना होगा और सत्यापित करना होगा कि यह अपेक्षित संख्या है। इससे बचना आसान है (वर्णन को स्थानांतरित करके) जब कोड के केवल एक हिस्से में स्थिरांक का उपयोग किया जाता है। जब नामित स्थिरांक का उपयोग असमान भागों में किया जाता है, तो दूसरी ओर, दूरस्थ स्थान पाठक के लिए एक संकेत है कि कोड में अन्य स्थानों पर समान मान प्रदर्शित होता है, जो देखने के अनुरूप भी हो सकता है।
 * यह कोड को और अधिक शब्दबहुल बना सकता है। स्थिरांक का वर्णन एक रेखा समूह करता है। जब स्थिरांक का नाम मान से अधिक लंबा होता है, विशेष रूप से यदि ऐसे कई स्थिरांक एक पंक्ति में दिखाई देते हैं, तो कोड के एक तार्किक कथन को कई पंक्तियों में विभाजित करना आवश्यक हो सकता है। शब्दबहुलता में वृद्धि तब उचित हो सकती है जब स्थिरांक के बारे में भ्रम की कुछ संभावना हो, या जब संभावना हो कि स्थिरांक को बदलने की आवश्यकता हो सकती है, जैसे कि अन्य कार्ड गेम के लिए पीछे मुड़ने की क्रिया का कोड पुन: उपयोग होता हैं। अभिव्यक्ति में वृद्धि के रूप में इसे समान रूप से उचित ठहराया जा सकता है।
 * अभिव्यक्ति को संसाधित करना धीमा हो सकता है  रन-टाइम पर मान 53 से अधिक है, यद्यपि की अधिकांश आधुनिक संकलक और अनुवादक इस पर ध्यान देंगे डेक आकार एक स्थिर के रूप में वर्णित किया गया है और संकलित कोड में मान 53 की पूर्व-गणना किया जाता है। यहां तक ​​कि जब यह कोई विकल्प नहीं है, तब भी लूप अनुकूलन जोड़ को स्थानांतरित करेगा जिससे की यह लूप से पहले किया जा सके। इसलिए कोड में मैजिक संख्याओं का उपयोग करने की तुलना में साधारणतया कोई (या नगण्य) गति दंड नहीं होता है। विशेष रूप से डी बग्गिंग की मान और अव्याख्यात्मक कोड को समझने की कोशिश करने में लगने वाले समय को छोटी गणना के मान के विरुद्ध रखा जाना चाहिए।

स्वीकृत उपयोग
कुछ संदर्भों में, अनामित संख्यात्मक स्थिरांक का उपयोग साधारणतया स्वीकार किया जाता है (और वास्तविक मैजिक नहीं है)। जबकि ऐसी स्वीकृति व्यक्तिपरक है, और प्रायः व्यक्तिगत कोडिंग प्रवृति पर निर्भर करती है, निम्नलिखित सामान्य उदाहरण हैं:

स्थिरांक 1 और 0 का उपयोग कभी-कभी बिना बूलियन प्रकार के प्रोग्रामिंग भाषाओं में बूलियन डेटा प्रकार के मानों सही अथवा गलत का प्रतिनिधित्व करने के लिए किया जाता है, जैसे कि C (प्रोग्रामिंग भाषा) के पुराने संस्करण में होता हैं। अधिकांश आधुनिक प्रोग्रामिंग भाषाएँ   या   आदिम प्रकार प्रदान करती हैं और इसलिए 0 और 1 के उपयोग का सुझाव नहीं दी जाती है। यह अधिक भ्रामक हो सकता है क्योंकि 0 का अर्थ कभी-कभी प्रोग्रामेटिक सफलता (जब -1 का अर्थ विफलता) और अन्य स्थितियों में विफलता (जब 1 का अर्थ सफलता) होता है।
 * लूप के लिए प्रारंभिक या वृद्धिशील मानों के रूप में 0 और 1 का उपयोग, जैसे for (int i = 0; i < max; i += 1)
 * कोई संख्या सम है या विषम, यह जाँचने के लिए 2 का प्रयोग, जहाँ   मापांक ऑपरेटर है
 * सरल अंकगणितीय स्थिरांक का उपयोग, उदाहरण के लिए, जैसे भावों में, या किसी द्विघात समीकरण के विविक्तकर की गणना के लिए
 * मीट्रिक मानों को परिवर्तित करने के लिए 10 की घातों का उपयोग (जैसे ग्राम और किलोग्राम के बीच) या प्रतिशत और प्रति मील मान की गणना करने के लिए किया जाता हैं।
 * भावों में प्रतिपादक के लिए जैसे  के लिए $$\sqrt{f(x)^2 + f(y)^2}$$

सी और सी ++ में, 0 शून्य सूचक का प्रतिनिधित्व करता है। बूलियन मानों के साथ, सी मानक लाइब्रेरी में मैक्रो परिभाषा सम्मलित है जिसके प्रयोग को बढ़ावा दिया जाता है। अन्य भाषाएँ एक विशिष्ट या  मान प्रदान करती हैं और जब यह स्थिति हो तो किसी विकल्प का उपयोग नहीं किया जाता है। टाइप किया गया सूचक स्थिरांक   C++11 के साथ प्रदान किया जाता है।

उत्पत्ति
प्रारूप संकेतकों का उपयोग पहले संस्करण 7 यूनिक्स स्रोत कोड में किया गया था।

यूनिक्स को पहले डिजिटल उपकरण निगम पि डी पि-11/20s में लगाया गया था, जिसमें मेमोरी सुरक्षा नहीं थी। यूनिक्स के प्रारंभिक संस्करणों ने स्थिति-स्वतंत्र कोड प्रणाली का उपयोग किया जाता हैं। पूर्व-छठा संस्करण यूनिक्स संस्करण एक निष्पादन योग्य फ़ाइल को चुंबकीय-कोर मेमोरी में पढ़ता है और प्रोग्रामिंग के पहले निम्न मेमोरी एड्रेस पर पर पहुंच जाता है, जिसका सापेक्ष एड्रेस शून्य होता हैं। यूनिक्स के स्मृति पृष्ठ संस्करणों के विकास के साथ, निष्पादन योग्य घटकों का वर्णन करने के लिए एक हेडर (कंप्यूटिंग) बनाया गया था। इसके अतिरिक्त, हेडर को छोड़ने और प्रोग्राम शुरू करने के लिए हेडर के पहले शब्द के रूप में एक शाखा निर्देश डाला गया था। इस तरह एक प्रोग्राम को पुराने स्थानापन्न स्मृति संदर्भ (नियमित) प्रारूप में या पेजेड प्रारूप में चलाया जा सकता है। जैसा कि अधिक निष्पादन योग्य प्रारूप विकसित किए गए थे, शाखा ऑफ़सेट (कंप्यूटर विज्ञान) को बढ़ाकर नए स्थिरांक जोड़े गए थे।

यूनिक्स प्रोग्राम लोडर के सोर्स कोड के साथ यूनिक्स 6वें संस्करण में, निष्पादन  फ़ंक्शन फ़ाइल प्रणाली से निष्पादन योग्य (बाइनरी अंक प्रणाली) छवि को पढ़ता है। फ़ाइल के पहले 8 बाइट्स  एक हेडर (कंप्यूटिंग) थे जिसमें प्रोग्राम (पाठ) के आकार और आरंभिक (वैश्विक) डेटा क्षेत्र शामिल थे। इसके अतिरिक्त, हेडर के पहले 16-बिट शब्द की तुलना दो स्थिर (प्रोग्रामिंग) एस से की गई थी जिससे की यह निर्धारित किया जा सके कि निष्पादन योग्य में स्थिति-स्वतंत्र कोड (सामान्य), नया कार्यान्वित मेमोरी पेज रीड-ओनली निष्पादन योग्य छवि, या अलग निर्देश और डेटा पृष्ठांकित छवि होता हैं। हेडर स्थिरांक की दोहरी भूमिका का कोई उल्लेख नहीं था, लेकिन स्थिरांक का उच्च क्रम बाइट, वास्तव में, पि डी पि-11 शाखा निर्देश (अष्टभुजाकार 000407 या हेक्साडेसिमल 0107) के लिए ऑपरेशन कोड था। प्रोग्राम काउंटर में सात जोड़ने से पता चलता है कि यदि यह स्थिरांक निष्पादन योग्य था, तो यह निष्पादन योग्य छवि आठ बाइट हेडर पर यूनिक्स निष्पादन  सेवा को शाखा देगा और प्रोग्रामिंग को प्रारम्भ कर देगा।

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

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

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


 * उदाहरण
 * संकलक जावा वर्ग फाइल्स (जावा बाइटकोड) और मच ओ (कर्नेल) | मच-ओ बाइनरी hex से शुरू होते हैं। Pack200 के साथ संपीड़ित होने पर बाइट्स को
 * ग्राफिक्स बदलाव प्रारूप इमेज फ़ाइलों में जीआईऍफ़89a (           ) या जीआईऍफ़87a (           ) के लिए एएससीआईआई कोड होता है।
 * जेपिइजी इमेज फाइल    से शुरू होती है और    से समाप्त होती है। जेपीईजी/जेएफआईएफ फाइलों में जेएफआईएफ (       ) के लिए एएससीआईआई कोड होता है। एक अशक्त-समाप्त स्ट्रिंग के रूप में। जेपिइजी/एगसिफ फ़ाइलों में एगसिफ के लिए एएससीआईआई कोड होता है (       ) भी एक अशक्त टर्मिनेटेड स्ट्रिंग के रूप में, फ़ाइल के बारे में अधिक मेटाडेटा (कंप्यूटिंग) के अनुसरण करते हैं।
 * पोर्टेबल नेटवर्क ग्राफ़िक्स इमेज फ़ाइलें एक 8-बाइट चिन्ह से शुरू होती हैं जो फ़ाइल को पीएनजी फ़ाइल के रूप में पहचानती है और सामान्य फ़ाइल स्थानांतरण समस्याओं का पता लगाने की अनुमति देती है:                (               )। उस चिन्ह में विभिन्न  नई पंक्ति वर्ण होते हैं जो अवांछित स्वचालित न्यूलाइन रूपांतरणों का पता लगाने की अनुमति देते हैं, जैसे कि बाइनरी मोड के बजाय एएससीआईआई फाइल ट्रांसफर प्रोटोकॉल # प्रोटोकॉल समीक्षा के साथ फाइल ट्रांसफर प्रोटोकॉल का उपयोग करके फ़ाइल को स्थानांतरित करता हैं।
 * मानक एम्आईडीआई ध्वनि फाइलों में एमटीएचडी के लिए एएससीआईआई कोड होता है (मिडी ट्रैक हेडर,       ) और अधिक मेटाडेटा का अनुसरण करता हैं।
 * यूनिक्स या लिनक्स स्क्रिप्ट शेबैंग (यूनिक्स) से शुरू हो सकते हैं शेबांग (,    ) एक अनुवादक निर्देश के लिए पथ के बाद, यदि अनुवादक उस से अलग होने की संभावना है जिससे स्क्रिप्ट का आह्वान किया गया था।
 * साध्य और जोड़ने योग्य फ़ॉर्मेट एक्ज़ीक्यूटेबल्स        से शुरू होते हैं।
 * परिशिष्ट भाग फाइलें और प्रोग्राम %! (   ) से शुरू होते हैं।
 * पीडीएफ फाइलें% पीडीएफ (हेक्स       ) से शुरू होती हैं।
 * डीओएसएम् जेड साध्य फ़ाइलें और इएक्सइ #माइक्रोसॉफ्ट विंडोज के अन्य पोर्टेबल निष्पादन योग्य (पोर्टेबल साध्य) फ़ाइलें एम्जेड वर्णों से शुरू होती हैं (   ), फ़ाइल स्वरूप के डिज़ाइनर मार्क ज़बिकोवस्की के आद्याक्षर के अनुसार होता हैं। परिभाषा असामान्य जेडएम् (   ) की अनुमति देती है साथ ही डॉस जेडएम्एक्सपी के लिए, एक गैर-पीइइएक्सइ की भी अनुमति प्रदान करता हैं।
 * बर्कले फास्ट फाइल सिस्टम सुपरब्लॉक प्रारूप की पहचान या तो        या       संस्करण के आधार पर है; ये दोनों लेखक मार्शल किर्क मैककुसिक के जन्मदिन का प्रतिनिधित्व करते हैं।
 * लगभग सभी आई ए-32 आईबीएम् पीसी अनुकूलन पर बूट करने योग्य स्टोरेज डिवाइस के मास्टर बूट आलेख इसके अंतिम दो बाइट्स के रूप में एक कोड    होता है।
 * गेम बॉय और गेम बॉय एडवांस हस्तचालित वीडियो गेम प्रणाली के निष्पादनयोग्य में हेडर में एक निश्चित स्थान पर क्रमशः 48-बाइट या 156-बाइट मैजिक संख्याये होता है। यह मैजिक संख्या नाइनटेंडो के प्रतिक चिन्ह के बिटमैप को एनकोड करता है।
 * अमिगा सॉफ़्टवेयर निष्पादन योग्य हंक फ़ाइलें अमिगा क्लासिक 68000 मशीनों पर चल रही हैं, सभी हेक्साडेसिमल संख्या $000003f3 के साथ शुरू हुईं, जिसे मैजिक कुकी का उपनाम दिया गया।
 * अमिगा में, सिस्टम में एकमात्र पूर्ण पता हेक्स $0000 0004 (मेमोरी स्थान 4) है, जिसमें सीस बेस नामक प्रारंभ स्थान होता है, जो अमिगा के तथाकथित कर्नेल (ऑपरेटिंग सिस्टम) को निष्पादित करने के लिए एक सूचक है।
 * क्लासिक मैक ओएस और पावरपीसी एक्जीक्यूटिव के लिए बी इ ओ एस द्वारा उपयोग की जाने वाली निष्पादन योग्य प्रारूप फाइलें, उपसर्ग के लिए एएससीआईआई कोड ! (       ) सम्मलित करती हैं।
 * टीआईएफएफ फाइलें या तो  या  से शुरू होती हैं छोटे या बड़े एंडियन बाइट क्रम में दो बाइट इन्टिजर के रूप में ४२ के द्वारा अनुसरण किया जाता हैं।     इंटेल के लिए है, जो एंडियननेस बाइट ऑर्डरिंग का उपयोग करता है, इसलिए मैजिक संख्या        है।  मोटोरोला के लिए है, जो एंडियननेस बाइट ऑर्डरिंग का उपयोग करता है, इसलिए मैजिक संख्या          है।
 * युटीऍफ़-16 में एन्कोडेड यूनिकोड टेक्स्ट फाइलें प्रायः एंडियननेस का पता लगाने के लिए बाइट ऑर्डर मार्क से शुरू होती हैं (   बड़े एंडियन के लिए और     छोटे एंडियन के लिए)। और Microsoft Windows पर, यु टी ऍफ़-8 टेक्स्ट फाइलें प्रायः उसी वर्ण के UTF-8 एन्कोडिंग      के साथ शुरू होती हैं।
 * एलएलवीएम बिटकोड फाइलें  (0x42, 0x43) से शुरू होती हैं।
 * WAD फाइलें  या   (डूम (1993 वीडियो गेम) के लिए),   (क्वाके (वीडियो गेम)  के लिए) और   (हाफ-लाइफ (वीडियो गेम) के लिए शुरू होती हैं।
 * माइक्रोसॉफ्ट मिश्रित फ़ाइल बाइनरी स्वरूप (ज्यादातर माइक्रोसॉफ्ट ऑफिस आलेखों के पुराने प्रारूपों में से एक के रूप में जाना जाता है)        फाइलों से शुरू होता है, जो चित्रित रूप से DOCFILE0 शब्द का सूचक है।
 * जेड आई पी (फ़ाइल स्वरूप) फ़ाइलों में हेडर प्रायः पाठ संपादकों में पीके♥♦ के रूप (       ) में दिखाई देते हैं, जहां पीके, डीओएस कम्प्रेशन यूटिलिटी पीकेजेडएपी के लेखक, फील काट्ज़ के आद्याक्षर हैं।
 * 7 जेड फ़ाइलों में शीर्षलेख 7 जेड(पूर्ण मैजिक संख्या:           ) से शुरू होते हैं।

संसूचन

यूनिक्स उपयोगिता प्रोग्रामिंग  फाइलों से मैजिक संख्याओं को पढ़ और व्याख्या कर सकता है, और जिस फाइल का उपयोग सूचनाओं की पद व्याख्या करने के लिए किया जाता है, उसे मैजिक कहा जाता है। Windows उपयोगिता TrID का एक समान उद्देश्य है।

प्रोटोकॉल में

 * उदाहरण
 * एओएल तात्कालिक मैसेन्जर/आईसीक्यूँ में प्रयुक्त ओएससीएआर प्रोटोकॉल, उपसर्ग के साथ अनुरोध करता हैं।
 * काल्पनिक नेटवर्क कंप्यूटिंग द्वारा उपयोग किए जाने वाले आरऍफ़बी प्रोटोकॉल में, क्लाइंट आरऍफ़बी (   , रिमोट फ़्रेम बफ़र के लिए) क्लाइंट का प्रोटोकॉल संस्करण संख्या का अनुसरण किया जाता हैं।
 * माइक्रोसॉफ्ट विंडोज द्वारा उपयोग किए जाने वाले सर्वर संदेश ब्लॉक प्रोटोकॉल में, प्रत्येक एसएमबी अनुरोध या सर्वर प्रत्तिउत्तर      ', या   एसएम्बी अनुरोध के साथ प्रारंभ होता है।
 * माइक्रोसॉफ्ट विंडोज द्वारा उपयोग किए जाने वाले एमएसआरपीसी प्रोटोकॉल में, प्रत्येक टीसीपी-आधारित अनुरोध  के साथ शुरू होता है अनुरोध के प्रारंभ में (माइक्रोसॉफ्ट डीसीइ/आरपीसी संस्करण 5 का प्रतिनिधित्व करते हुए), उसके तुरंत बाद a   या   लघु संस्करण के लिए प्रयुक्त होता हैं। यूडीपी-आधारित एमएसआरपीसी अनुरोधों में पहली बाइट हमेशा होती है।
 * घटकऑब्जेक्ट मॉडल और वितरित [[घटक वस्तु मॉडल ]] मार्शल्ड इंटरफेस में, जिसे OBJREFs कहा जाता है, हमेशा बाइट सीक्वेंस एम् इ ओ डब्लू  से शुरू होता है। डिबगिंग एक्सटेंशन (डीसीओएम् चैनल हुकिंग के लिए प्रयुक्त) बाइट अनुक्रम एम्एआरबी  प्रारम्भ होता हैं।
 * अनएन्क्रिप्टेड बिटटोरेंट ट्रैकर अनुरोध मान वाले  हेडर की लंबाई का प्रतिनिधित्व करते हुए एक बाइट से शुरू होते हैं, बाइट स्थिति 1 पर वाक्यांश बिटटोरेंट प्रोटोकॉल द्वारा शीघ्र अनुसरण किया जाता है।
 * इ डंकी2000/इ म्यूल ट्रैफ़िक क्लाइंट संस्करण का प्रतिनिधित्व करने वाली एक बाइट से शुरू होता है। वर्तमान में  एक इ डंकी क्लाइंट का प्रतिनिधित्व करता है,   इ म्यूल का प्रतिनिधित्व करता है, और   संकुचित इ म्यूल का प्रतिनिधित्व करता है।
 * पहला   Bitcoin  ब्लॉकचैन में एक ब्लॉक के बाइट्स में एक मैजिक संख्या होती है जो नेटवर्क पहचानकर्ता के रूप में कार्य करती है। मान  स्थिर होता है जो मुख्य नेटवर्क को इंगित करता है, जबकि स्थिरांक  टेस्टनेट को इंगित करता है।
 * सुरक्षित सॉकेट पर्त संचालन हमेशा क्लाइंट हेलो मैसेज से शुरू होते हैं। सभी एसएसएल पैकेटों को उपसर्ग करने के लिए उपयोग की जाने वाली रिकॉर्ड एनकैप्सुलेशन योजना में दो- और तीन-बाइट हेडर फॉर्म होते हैं। साधारणतया एक एसएसएल संस्करण 2 क्लाइंट हैलो संदेश के साथ उपसर्ग किया जाता है  और क्लाइंट हैलो के लिए एक SSLv3 सर्वर प्रतिक्रिया   के साथ शुरू होता है (यद्यपि की यह भिन्न हो सकता है)।
 * डीएचसीपी पैकेट एक मैजिक कुकी मान '      ' का उपयोग करते हैं, पैकेट के विकल्प अनुभाग की प्रारम्भ में। यह मान सभी डीएचसीपी पैकेट प्रकारों में सम्मलित है।
 * HTTP/2 कनेक्शन प्रस्तावना ' ' या प्रस्तावना को सर्वर और मध्यवर्ती द्वारा फ़्रेम के प्रसंस्करण से बचने के लिए निर्मित किया गया है जो HTTP के पुराने संस्करणों का समर्थन करते हैं लेकिन 2.0 का नहीं करते हैं।

इंटरफेस में
डीओएस, विंडोज और नेटवेयर सहित कई ऑपरेटिंग सिस्टम में एपीआई फ़ंक्शंस और इंटरफ़ेस (कंप्यूटिंग) में मैजिक संख्या सामान्य हैं:


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

अन्य उपयोग

 * उदाहरण
 * एक चिप पर टेक्सास इंस्ट्रूमेंट्स सिस्टम पर डिफ़ॉल्ट मैक पता  DE:AD:BE:EF:00:00 है।

डेटा प्रकार की सीमाएँ
यह डेटा संग्रहण प्रकारों की सीमाओं की एक सूची है:

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

माइक्रोसॉफ्ट ऑफिस उत्पादों के लिए माइक्रोसॉफ्ट विंडोज उत्पाद आईडी संख्याएँ कभी-कभी  के साथ समाप्त होती हैं  (ऑफिस), जैसे { }, ऑफिस16 क्लिक-टू-रन अतिरिक्त घटक के लिए आईडी उत्पाद होता है।

जावा  शुरू होने वाले कई जीयुआईडी का उपयोग करता है।

जीपीटी विभाजन योजना की जीयुआईडी विभाजन तालिका में, बीआईओएस बूट विभाजन विशेष जीयुआईडी { } का उपयोग करते हैं जो जीयुआईडी परिभाषा का अनुसरण नहीं करता है; इसके अतिरिक्त, यह स्ट्रिंग के लिए एएससीआईआई कोड का आंशिक रूप से छोटे एंडियन क्रम में उपयोग करके बनता है।

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

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

प्रसिद्ध और साधारण उदाहरणों में सम्मलित हैं:

इनमें से अधिकांश प्रत्येक 32 अंश लंबे हैं – अधिकांश 32-बिट आर्किटेक्चर कंप्यूटर का शब्द आकार।

माइक्रोसॉफ्ट प्रौद्योगिकी में इन मानो की व्यापकता कोई संयोग नहीं है; उन पर माइक्रोसॉफ्ट प्रेस से स्टीव मगुइरे की किताब राइटिंग सॉलिड कोड में विस्तार से बताया गया है। वह इन मानो के लिए विभिन्न मानदंड देता है, जैसे:


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

चूंकि वे अक्सर स्मृति के उन क्षेत्रों को चिह्नित करने के लिए उपयोग किए जाते थे जो अनिवार्य रूप से खाली थे, इनमें से कुछ शब्द वाक्यांशों में उपयोग किए जाने लगे, जिसका अर्थ है चला गया, निरस्त, स्मृति से निकल गया; उदा. आपका कार्यक्रम डेडबीफ है।

यह भी देखें

 * मैजिक स्ट्रिंग
 * फाइल फॉर्मेट और मैजिक संख्या
 * फ़ाइल हस्ताक्षरों की सूची
 * चार सी.सी
 * कठिन कोडिंग
 * जादू (प्रोग्रामिंग)
 * NaN (संख्या नहीं)
 * प्रगणित प्रकार
 * हेक्सस्पीक, जादुई मूल्यों के एक और सेट के लिए
 * क्रिप्टोग्राफी एल्गोरिदम में जादू स्थिरांक के बारे में मेरी आस्तीन संख्या कुछ भी नहीं है
 * जादू के कारण होने वाली समस्याओं के लिए समय स्वरूपण और भंडारण बग
 * प्रहरी मूल्य (उर्फ फ्लैग वैल्यू, ट्रिप वैल्यू, रॉग वैल्यू, सिग्नल वैल्यू, डमी डेटा)
 * कैनरी मूल्य, बफर ओवरफ्लो का पता लगाने के लिए विशेष मूल्य
 * XYZZY (जादू शब्द)
 * तेज उलटा वर्गमूल, एक एल्गोरिद्म जो निरंतर 0x5F3759DF का उपयोग करता है