कंप्यूटर (या अधिक सटीक रूप से संकलक) वास्तव में इस बात की परवाह नहीं करता है कि आप अपने स्रोत कोड में किस संख्या के आधार का उपयोग करते हैं। अधिकांश आमतौर पर उपयोग की जाने वाली प्रोग्रामिंग भाषाएं सीधे आधार 8 (ओक्टल), 10 (दशमलव) और 16 (हेक्साडेसिमल) का समर्थन करती हैं। कुछ भी आधार 2 (बाइनरी) संख्याओं के लिए प्रत्यक्ष समर्थन को स्पोर्ट करते हैं। विशिष्ट भाषाएं अन्य संख्या आधारों का भी समर्थन कर सकती हैं। ("सीधे समर्थन" से मेरा मतलब है कि वे स्रोत कोड में गणितीय ट्रिक जैसे बिट्स शिफ्टिंग, गुणन, विभाजन आदि का सहारा लिए बिना उस आधार में अंकों के प्रवेश की अनुमति देते हैं। उदाहरण के लिए, C सीधे आधार -16 को इसके साथ समर्थन करता है।0x
संख्या उपसर्ग और 0123456789ABCDEF का नियमित षोडश आधारी अंक। अब, इस तरह के ट्रिक्स संदर्भ में समझने के लिए संख्या को आसान बनाने के लिए उपयोगी हो सकते हैं, लेकिन जब तक आप उनके बिना एक ही संख्या व्यक्त कर सकते हैं, तब तक ऐसा करना - या नहीं - केवल एक सुविधा है।)
हालांकि, अंत में, यह असंगत है। मान लें कि आपके पास इस तरह का एक बयान है:
int n = 10;
अभिप्राय एक पूर्णांक चर बनाने और दशमलव संख्या के साथ आरंभ करने से है। कंप्यूटर क्या देखता है?
i n t n = 1 0 ;
69 6e 74 20 6e 20 3d 20 31 30 3b (ASCII, hex)
संकलक इसे टोकन देगा, और महसूस करेगा कि आप int
नाम के साथ एक प्रकार का चर घोषित कर रहे हैं n
, और इसे कुछ प्रारंभिक मान असाइन करें। लेकिन वह मूल्य क्या है?
कंप्यूटर के लिए, और बाइट के आदेश और संरेखण मुद्दों की अनदेखी करते हुए, चर के प्रारंभिक मूल्य के लिए इनपुट है 0x31 0x30
। इसका मतलब यह है कि प्रारंभिक मूल्य 0x3130 (बेस 10 में 12592) है? बिलकूल नही। भाषा पार्सर को इस्तेमाल किए गए चरित्र एन्कोडिंग में फ़ाइल को पढ़ना जारी रखना चाहिए, इसलिए यह 1
0
एक बयान टर्मिनेटर द्वारा पढ़ा जाता है। चूँकि इस भाषा में आधार 10 को माना जाता है, यह "0 वाले, 1 दसवें, अंत" के रूप में पढ़ता है। यानी 10 दशमलव का मान।
यदि हम हेक्साडेसिमल में एक मान निर्दिष्ट करते हैं, और हमारी भाषा 0x
यह निर्दिष्ट करने के लिए उपयोग करती है कि निम्न मान हेक्साडेसिमल में है, तो हमें निम्नलिखित मिलते हैं:
i n t n = 0 x 1 0 ;
69 6e 74 20 6e 20 3d 20 30 78 31 30 3b (ASCII, hex)
संकलक 0x
(0x30 0x78) देखता है और पहचानता है कि बेस -16 उपसर्ग के रूप में है, इसलिए इसके पीछे एक वैध आधार -16 संख्या की तलाश है। स्टेटमेंट टर्मिनेटर तक, यह पढ़ता है 10
। यह 0 "लोगों", 1 "सिक्सटेंस" का अनुवाद करता है, जो बेस 10. में 16 तक काम करता है या बेस 2 में 00010000 है। या फिर इसके अलावा आप इसका प्रतिनिधित्व करना पसंद करते हैं।
या तो मामले में, और सादगी के लिए अनुकूलन की अनदेखी करते हुए, संकलक एक int
प्रकार के चर के मूल्य को रखने के लिए पर्याप्त भंडारण आवंटित करता है , और वहाँ स्रोत मूल्य से कुछ प्रकार के अस्थायी धारण चर में पढ़ा मूल्य रखता है। यह तब (संभवतः बाद में) वस्तु कोड फ़ाइल में परिणामी बाइनरी मान लिखता है।
जैसा कि आप देखते हैं, जिस तरह से आप स्रोत कोड में संख्यात्मक मान लिखते हैं, वह पूरी तरह से असंगत है। संकलित समय पर इसका बहुत मामूली प्रभाव हो सकता है , लेकिन मुझे लगता है कि (फिर, ऑपरेटिंग सिस्टम द्वारा डिस्क कैशिंग जैसे अनुकूलन को अनदेखा करते हुए) डिस्क के घूर्णन प्लैटर्स, डिस्क एक्सेस टाइम, डेटा बस डिवीजनों के आसपास यादृच्छिक अशांति जैसी चीजें , आदि, एक बहुत अधिक प्रभाव है।
नीचे पंक्ति: इसके बारे में चिंता मत करो। संख्याओं को एक आधार में लिखें जिसे आपकी पसंद की प्रोग्रामिंग भाषा समर्थन करती है और जो इस बात के लिए समझ में आता है कि संख्या का उपयोग कैसे किया जाएगा और / या पढ़ें। आपने इस उत्तर को पढ़ने में अधिक समय बिताया है क्योंकि आप कभी भी संकलन समय में ठीक हो जाएंगे कि स्रोत कोड में किस संख्या के आधार का उपयोग करना है। ;)