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

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


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

अज्ञात संख्यात्मक स्थिरांक
मैजिक नंबर या मैजिक स्थिरांक शब्द सीधे स्रोत कोड में संख्याओं का उपयोग करने के एंटी पैटर्न को संदर्भित करता है। इसे प्रोग्रामिंग के सबसे प्राचीन नियमों में से एक को खंडित करने के रूप में संदर्भित किया गया है, जो 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 टाइप करने से पता नहीं चलेगा के बजाय परिणामस्वरूप संकलक की चेतावनी होगी  अघोषित है।
 * यह कुछ एकीकृत विकास वातावरणों में टाइपिंग को कम कर सकता है। यदि कोई IDE स्वतः पूर्ण # स्रोत कोड संपादकों का समर्थन करता है, तो यह पहले कुछ अक्षरों से अधिकांश चर के नाम को भर देगा।
 * यह पैरामीटराइजेशन की सुविधा देता है। उदाहरण के लिए, उपरोक्त उदाहरण को एक ऐसी प्रक्रिया में सामान्यीकृत करने के लिए जो किसी भी कार्ड के डेक को शफल करता है, यह बारी करने के लिए पर्याप्त होगा  उस प्रक्रिया के एक पैरामीटर में, जबकि पहले उदाहरण में कई बदलावों की आवश्यकता होगी।

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

नुकसान हैं:


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

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

स्थिरांक 1 और 0 का उपयोग कभी-कभी बिना बूलियन प्रकार के प्रोग्रामिंग भाषाओं में बूलियन डेटा प्रकार के मानों True और False का प्रतिनिधित्व करने के लिए किया जाता है, जैसे कि 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 यूनिक्स स्रोत कोड में किया गया था।

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

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

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

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


 * उदाहरण
 * संकलक  जावा वर्ग फ़ाइल ्स (जावा बाइटकोड) और मच (कर्नेल) | मच-ओ बायनेरिज़ हेक्स से शुरू होते हैं  . Pack200 के साथ संपीड़ित होने पर बाइट्स को बदल दिया जाता है.
 * ग्राफिक्स बदलाव प्रारूप छवि फ़ाइलों में GIF89a के लिए ASCII कोड होता है (           ) या GIF87a (           )
 * JPEG इमेज फाइल से शुरू होती है    और साथ समाप्त करें    . जेपीईजी/जेएफआईएफ फाइलों में जेएफआईएफ के लिए एएससीआईआई कोड होता है (       ) एक अशक्त-समाप्त स्ट्रिंग के रूप में। JPEG/Exif फ़ाइलों में Exif के लिए ASCII कोड होता है (       ) भी एक अशक्त समाप्त स्ट्रिंग के रूप में, फ़ाइल के बारे में अधिक मेटाडेटा (कंप्यूटिंग) के बाद।
 * पोर्टेबल नेटवर्क ग्राफ़िक्स छवि फ़ाइलें एक 8-बाइट हस्ताक्षर से शुरू होती हैं जो फ़ाइल को पीएनजी फ़ाइल के रूप में पहचानती है और सामान्य फ़ाइल स्थानांतरण समस्याओं का पता लगाने की अनुमति देती है:                (               ). उस हस्ताक्षर में विभिन्न  नई पंक्ति  वर्ण होते हैं जो अवांछित स्वचालित न्यूलाइन रूपांतरणों का पता लगाने की अनुमति देते हैं, जैसे कि बाइनरी मोड के बजाय एएससीआईआई फाइल ट्रांसफर प्रोटोकॉल # प्रोटोकॉल ओवरव्यू के साथ फाइल ट्रांसफर प्रोटोकॉल का उपयोग करके फ़ाइल को स्थानांतरित करना।
 * मानक मिडी ऑडियो फाइलों में एमटीएचडी के लिए एएससीआईआई कोड होता है (मिडी ट्रैक हेडर,       ) और अधिक मेटाडेटा के बाद।
 * यूनिक्स या लिनक्स स्क्रिप्ट शेबैंग (यूनिक्स) से शुरू हो सकते हैं शेबांग (,    ) एक दुभाषिया निर्देश के लिए पथ के बाद, अगर दुभाषिया उस से अलग होने की संभावना है जिससे स्क्रिप्ट का आह्वान किया गया था।
 * एक्ज़ीक्यूटेबल और लिंक करने योग्य फ़ॉर्मेट एक्ज़ीक्यूटेबल्स से शुरू होते हैं
 * परिशिष्ट भाग फाइलें और प्रोग्राम % से शुरू होते हैं! (   ).
 * पीडीएफ फाइलें% पीडीएफ से शुरू होती हैं (हेक्स       ).
 * DOS MZ एक्ज़ीक्यूटेबल फ़ाइलें और EXE#Microsoft Windows के अन्य पोर्टेबल निष्पादन योग्य (पोर्टेबल एक्ज़ीक्यूटेबल) फ़ाइलें MZ वर्णों से शुरू होती हैं (   ), फ़ाइल स्वरूप के डिज़ाइनर मार्क ज़बिकोवस्की के आद्याक्षर। परिभाषा असामान्य ZM की अनुमति देती है (   ) साथ ही dosZMXP के लिए, एक गैर-PE EXE।
 * बर्कले फास्ट फाइल सिस्टम सुपरब्लॉक प्रारूप की पहचान या तो है        या       संस्करण के आधार पर; दोनों लेखक मार्शल किर्क मैककुसिक के जन्मदिन का प्रतिनिधित्व करते हैं।
 * लगभग सभी IA-32 IBM PC कॉम्पैटिबल्स पर बूट करने योग्य स्टोरेज डिवाइस के मास्टर बूट दस्तावेज़  का एक कोड होता है     इसके अंतिम दो बाइट्स के रूप में।
 * खेल का लड़का और गेम बॉय एडवांस हैंडहेल्ड वीडियो गेम सिस्टम के निष्पादनयोग्य में हेडर में एक निश्चित स्थान पर क्रमशः 48-बाइट या 156-बाइट मैजिक नंबर होता है। यह मैजिक नंबर Nintendo लोगो के बिटमैप को एनकोड करता है।
 * अमिगा सॉफ़्टवेयर निष्पादन योग्य दोस्त हंक  फ़ाइलें अमिगा क्लासिक 68000 मशीनों पर चल रही हैं, सभी हेक्साडेसिमल संख्या $000003f3 के साथ शुरू हुईं, जिसे मैजिक कुकी का उपनाम दिया गया।
 * अमिगा में, सिस्टम में एकमात्र पूर्ण पता हेक्स $0000 0004 (मेमोरी स्थान 4) है, जिसमें SysBase नामक प्रारंभ स्थान होता है, जो अमिगा के तथाकथित कर्नेल (ऑपरेटिंग सिस्टम) को निष्पादित करने के लिए एक सूचक है।
 * क्लासिक मैक ओएस और पावरपीसी एक्जीक्यूटिव के लिए BeOS द्वारा उपयोग की जाने वाली पसंदीदा निष्पादन योग्य प्रारूप फाइलें, खुशी के लिए एएससीआईआई कोड शामिल करती हैं! (       ) उपसर्ग के रूप में।
 * टीआईएफएफ फाइलें या तो से शुरू होती हैं  या   उत्तर के बाद जीवन, ब्रह्मांड, और सब कुछ एक दो-बाइट पूर्णांक के रूप में छोटे या बड़े endianness बाइट क्रम में।   इंटेल के लिए है, जो एंडियननेस बाइट ऑर्डरिंग का उपयोग करता है, इसलिए जादू संख्या है        .   मोटोरोला के लिए है, जो एंडियननेस बाइट ऑर्डरिंग का उपयोग करता है, इसलिए मैजिक नंबर है       .
 * UTF-16 में एन्कोडेड यूनिकोड टेक्स्ट फाइलें अक्सर एंडियननेस का पता लगाने के लिए बाइट ऑर्डर मार्क से शुरू होती हैं (   बड़े एंडियन के लिए और     छोटे एंडियन के लिए)। और Microsoft Windows पर, UTF-8 पाठ फ़ाइलें अक्सर उसी वर्ण के UTF-8 एन्कोडिंग के साथ शुरू होती हैं,     .
 * एलएलवीएम बिटकोड फाइलें से शुरू होती हैं  (0x42, 0x43)
 * कयामत WAD फाइलें शुरू होती हैं  या   (डूम (1993 वीडियो गेम) के लिए),   ( भूकंप (वीडियो गेम)  के लिए) और   (हाफ-लाइफ (वीडियो गेम) के लिए|हाफ-लाइफ)।
 * माइक्रोसॉफ्ट मिश्रित फ़ाइल बाइनरी स्वरूप  (ज्यादातर माइक्रोसॉफ्ट ऑफिस दस्तावेजों के पुराने प्रारूपों में से एक के रूप में जाना जाता है) फाइलों से शुरू होता है       , जो नेत्रहीन रूप से DOCFILE0 शब्द का सूचक है।
 * ZIP (फ़ाइल स्वरूप) फ़ाइलों में हेडर अक्सर पाठ संपादकों में PK♥♦ के रूप में दिखाई देते हैं (       ), जहां PK, DOS कम्प्रेशन यूटिलिटी PKZIP के लेखक, Phil Katz के आद्याक्षर हैं।
 * 7z फ़ाइलों में शीर्षलेख 7z से शुरू होते हैं (पूर्ण जादुई संख्या:           ).

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

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

 * उदाहरण
 * AOL इन्स्टैंट मैसेन्जर/ICQ में प्रयुक्त OSCAR प्रोटोकॉल, अनुरोधों के साथ उपसर्ग करता है.
 * वर्चुअल नेटवर्क कंप्यूटिंग द्वारा उपयोग किए जाने वाले RFB प्रोटोकॉल में, क्लाइंट RFB (   , रिमोट फ़्रेम बफ़र के लिए) उसके बाद क्लाइंट का प्रोटोकॉल संस्करण संख्या।
 * माइक्रोसॉफ्ट विंडोज द्वारा उपयोग किए जाने वाले सर्वर संदेश ब्लॉक प्रोटोकॉल में, प्रत्येक एसएमबी अनुरोध या सर्वर उत्तर 'के साथ शुरू होता है।      ', या   SMB अनुरोध के प्रारंभ में।
 * माइक्रोसॉफ्ट विंडोज द्वारा उपयोग किए जाने वाले एमएसआरपीसी प्रोटोकॉल में, प्रत्येक टीसीपी-आधारित अनुरोध के साथ शुरू होता है  अनुरोध के प्रारंभ में (Microsoft DCE/RPC संस्करण 5 का प्रतिनिधित्व करते हुए), उसके तुरंत बाद a   या   लघु संस्करण के लिए। यूडीपी-आधारित एमएसआरपीसी अनुरोधों में पहली बाइट हमेशा होती है.
 * कंपोनेंट ऑब्जेक्ट मॉडल और वितरित [[घटक वस्तु मॉडल ]] मार्शल्ड इंटरफेस में, जिसे OBJREFs कहा जाता है, हमेशा बाइट सीक्वेंस MEOW से शुरू होता है . डिबगिंग एक्सटेंशन (DCOM चैनल हुकिंग के लिए प्रयुक्त) बाइट अनुक्रम MARB.
 * अनएन्क्रिप्टेड बिटटोरेंट ट्रैकर अनुरोध मूल्य वाले एक बाइट से शुरू होते हैं  हेडर की लंबाई का प्रतिनिधित्व करते हुए, बाइट स्थिति 1 पर वाक्यांश बिटटोरेंट प्रोटोकॉल द्वारा तुरंत पीछा किया जाता है।
 * eDonkey2000/eMule ट्रैफ़िक क्लाइंट संस्करण का प्रतिनिधित्व करने वाली एक बाइट से शुरू होता है। वर्तमान में  एक eDonkey क्लाइंट का प्रतिनिधित्व करता है,   eMule का प्रतिनिधित्व करता है, और   संकुचित eMule का प्रतिनिधित्व करता है।
 * पहला   Bitcoin  ब्लॉकचैन में एक ब्लॉक के बाइट्स में एक जादुई संख्या होती है जो नेटवर्क पहचानकर्ता के रूप में कार्य करती है। मान स्थिर है , जो मुख्य नेटवर्क को इंगित करता है, जबकि स्थिरांक   टेस्टनेट को इंगित करता है।
 * सुरक्षित सॉकेट लेयर ट्रांजैक्शन हमेशा क्लाइंट हेलो मैसेज से शुरू होते हैं। सभी एसएसएल पैकेटों को उपसर्ग करने के लिए उपयोग की जाने वाली रिकॉर्ड एनकैप्सुलेशन योजना में दो- और तीन-बाइट हेडर फॉर्म होते हैं। आमतौर पर एक एसएसएल संस्करण 2 क्लाइंट हैलो संदेश के साथ उपसर्ग किया जाता है   और क्लाइंट हैलो के लिए एक SSLv3 सर्वर प्रतिक्रिया के साथ शुरू होता है   (हालांकि यह भिन्न हो सकता है)।
 * डीएचसीपी पैकेट एक जादुई कुकी मूल्य का उपयोग करते हैं '      ' पैकेट के विकल्प अनुभाग की शुरुआत में। यह मान सभी डीएचसीपी पैकेट प्रकारों में शामिल है।
 * HTTP/2 कनेक्शन प्रस्तावना के साथ खोले जाते हैं' ', या . प्रस्तावना को सर्वर और बिचौलियों द्वारा फ़्रेम के प्रसंस्करण से बचने के लिए डिज़ाइन किया गया है जो HTTP के पुराने संस्करणों का समर्थन करते हैं लेकिन 2.0 का नहीं।

इंटरफेस में
DOS, Windows और NetWare सहित कई ऑपरेटिंग सिस्टम में API फ़ंक्शंस और इंटरफ़ेस (कंप्यूटिंग) में मैजिक नंबर सामान्य हैं:


 * उदाहरण
 * आईबीएम पीसी-संगत BIOS जादुई मूल्यों का उपयोग करते हैं  और   यह तय करने के लिए कि सिस्टम को मेमोरी की गणना करनी चाहिए या नहीं, रिबूट पर, जिससे ठंडा या गर्म बूट हो। थिसिस वैल्यू का उपयोग EMM386 मेमोरी मैनेजर द्वारा बूट रिक्वेस्ट को इंटरसेप्ट करने के लिए भी किया जाता है। BIOS जादुई मूल्यों का भी उपयोग करते हैं   यह निर्धारित करने के लिए कि डिस्क बूट करने योग्य है या नहीं।
 * MS-DOS डिस्क कैश SMARTDRV (कोडनाम बांबी) एपीआई कार्यों में जादुई मूल्यों BABE और EBAB का उपयोग करता है। * यूके में पूर्व यूरोपीय विकास केंद्र में विकसित कई DR DOS, Novell DOS और OpenDOS ड्राइवर्स (नकली) मानक DOS फ़ंक्शंस, NWCACHE के शीर्ष पर बैठकर अतिरिक्त कार्यक्षमता प्रदान करते समय मैजिक टोकन के रूप में 0EDC मान का उपयोग करते हैं।

अन्य उपयोग

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

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

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

Microsoft Office उत्पादों के लिए Microsoft Windows उत्पाद ID संख्याएँ कभी-कभी के साथ समाप्त होती हैं  (कार्यालय), जैसे { }, Office 16 क्लिक-टू-रन एक्सटेंसिबिलिटी घटक के लिए उत्पाद आईडी।

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

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

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

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

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

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


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

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

यह भी देखें

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