क्यों हेक्साडेसिमल संख्या के रूप में उपसर्ग हैं 0x
? मैं उपसर्ग के उपयोग को समझता हूं लेकिन मुझे इस बात का महत्व समझ में नहीं आता कि क्यों 0x
चुना गया था।
क्यों हेक्साडेसिमल संख्या के रूप में उपसर्ग हैं 0x
? मैं उपसर्ग के उपयोग को समझता हूं लेकिन मुझे इस बात का महत्व समझ में नहीं आता कि क्यों 0x
चुना गया था।
जवाबों:
लघु कथा:0
पार्सर यह एक निरंतर (और नहीं एक पहचानकर्ता / आरक्षित शब्द) के साथ काम कर रहा है बताता है। संख्या आधार को निर्दिष्ट करने के लिए अभी भी कुछ आवश्यक है: x
एक मनमाना विकल्प है।
लंबी कहानी: 60 के दशक में, प्रचलित प्रोग्रामिंग नंबर सिस्टम दशमलव और ऑक्टल थे - मेनफ्रेम में प्रति बाइट 12, 24 या 36 बिट्स थे, जो 3 = लॉग 2 (8) द्वारा अच्छी तरह से विभाज्य है।
बीसीपीएल भाषा ने 8 1234
अष्टक संख्याओं के लिए वाक्य रचना का उपयोग किया । जब केन थॉम्पसन ने बीसीपीएल से बी बनाया, तो उन्होंने 0
इसके बजाय उपसर्ग का उपयोग किया। यह बहुत अच्छा है क्योंकि
0
दोनों आधारों में समान है),00005 == 05
), और#123
)।जब C को B से बनाया गया था, तो हेक्साडेसिमल संख्याओं की आवश्यकता उत्पन्न हुई (PDP-11 में 16-बिट शब्द थे) और उपरोक्त सभी बिंदु अभी भी मान्य थे। चूंकि अन्य मशीनों के लिए ऑक्टल्स की आवश्यकता 0x
थी , इसलिए उन्हें मनमाने ढंग से चुना 00
गया था ( शायद अजीब के रूप में खारिज किया गया था)।
C # C का वंशज है, इसलिए यह सिंटैक्स को विरासत में मिला है।
0x
अधिक 00
वरीयता / भद्दापन था। 00
मौजूदा कोड को तोड़ देगा। 0010
जैसा कि अष्टक है 8
, जबकि 0010
हेक्सिडेसिमल होगा 16
। वे किसी भी संख्या को दूसरे अंकों के संकेतक के रूप में उपयोग नहीं कर सकते हैं (सिवाय 8
या इसके 9
, और न ही हेक्सिडेसिमल से संबंधित कोई महत्व नहीं रखते हैं) इसलिए एक पत्र एक होना चाहिए। और जो 0h
या तो छोड़ देता है या 0x
( एच ई एक्स आइडीसीमल)। इस बिंदु से ऐसा लगता है कि यह वास्तव में वरीयता के लिए वापस आ गया है।
0
अष्टक के लिए उपसर्ग का उपयोग करने से वर्षों में बहुत सारी समस्याएं पैदा हुई हैं। विशेष रूप से यूके जैसे देशों में जहां टेलीफोन नंबर एक से शुरू होते हैं 0
। जावास्क्रिप्ट और कई अन्य भाषाओं में ऑक्टल के रूप में इनको पार्स किया जाएगा, स्टोर करने से पहले नंबर को मेन्यू करना। मज़े में जोड़ने के लिए, एक लोकप्रिय डेटाबेस उत्पाद चुपचाप दशमलव पार्सिंग पर वापस आ जाएगा यदि संख्या में एक 8
या समाहित है 9
।
नोट: मुझे सही उत्तर नहीं पता, लेकिन नीचे सिर्फ मेरी व्यक्तिगत अटकलें हैं!
जैसा कि एक संख्या से पहले उल्लेख किया गया है इसका मतलब यह अष्टक है:
04524 // octal, leading 0
कल्पना कीजिए कि हेक्साडेसिमल संख्याओं को निरूपित करने के लिए एक प्रणाली के साथ आने की आवश्यकता है, और ध्यान दें कि हम एक सी शैली के वातावरण में काम कर रहे हैं। कैसे विधानसभा की तरह एच के साथ समाप्त होने के बारे में? दुर्भाग्य से आप नहीं कर सकते हैं - यह आपको टोकन बनाने की अनुमति देगा जो वैध पहचानकर्ता हैं (उदाहरण के लिए, आप एक चर का नाम एक ही बात कर सकते हैं) जो कुछ बुरा अस्पष्टता के लिए बना सकते हैं।
8000h // hex
FF00h // oops - valid identifier! Hex or a variable or type named FF00h?
आप एक ही कारण के लिए एक चरित्र के साथ नेतृत्व नहीं कर सकते:
xFF00 // also valid identifier
हैश का उपयोग करना संभवत: बाहर फेंक दिया गया क्योंकि यह प्रीप्रोसेसर के साथ संघर्ष करता है:
#define ...
#FF00 // invalid preprocessor token?
अंत में, जो भी कारण के लिए, उन्होंने हेक्साडेसिमल को दर्शाने के लिए एक अग्रणी 0 के बाद एक एक्स लगाने का फैसला किया। यह असंदिग्ध है क्योंकि यह अभी भी एक संख्या चरित्र के साथ शुरू होता है इसलिए एक वैध पहचानकर्ता नहीं हो सकता है, और संभवतः एक प्रमुख 0 के अष्टक सम्मेलन से बाहर है।
0xFF00 // definitely not an identifier!
0xFFAB1234
रूप में लिखा जाना चाहिए 0FFAB1234h
। मैं पास्कल में इनलाइन एएसएम से यह याद है जब मैं था युवा stackoverflow.com/q/11733731/995714
यह इंगित करने के लिए एक उपसर्ग है कि संख्या किसी अन्य आधार के बजाय हेक्साडेसिमल में है। C प्रोग्रामिंग लैंग्वेज इसका इस्तेमाल कंपाइलर को बताने के लिए करती है।
उदाहरण:
0x6400
करने के लिए अनुवाद 6*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600.
जब संकलक पढ़ता है 0x6400
, यह समझता संख्या की मदद से षोडश आधारी है 0x अवधि। आमतौर पर हम (6400) 16 या (6400) 8 या जो कुछ भी समझ सकते हैं ..
के लिए द्विआधारी यह होगा:
0b00000001
आशा है कि मैंने किसी तरह से मदद की है।
अच्छा दिन!
x6400
? x
अभी भी हेक्साडेसिमल अनुमान लगाने के लिए इस्तेमाल किया जा सकता।
पूर्ववर्ती 0 का उपयोग आधार 2, 8, या 16 में एक संख्या को इंगित करने के लिए किया जाता है।
मेरी राय में, 0x को हेक्स इंगित करने के लिए चुना गया था क्योंकि 'x' हेक्स की तरह लगता है।
बस मेरी राय है, लेकिन मुझे लगता है कि यह समझ में आता है।
अच्छा दिन!