2012-10-30 11 views
7

एक चर्चा से आ रहा है here, मानक अक्षरों के लिए मान निर्दिष्ट करता है? तो, '0' 48 होने की गारंटी है? एएससीआईआई हमें बताएगा, लेकिन क्या इसकी गारंटी है? यदि नहीं, तो क्या आपने कोई कंपाइलर देखा है जहां '0' 48 नहीं है?क्या एएससीआईआई होने की गारंटी वाले चार अक्षर का चरित्र सेट है?

+13

एक शब्द: EBCDIC। – kennytm

+0

मैं इस बारे में उत्सुक हूं कि आप यह क्यों पूछ रहे हैं। जाहिर है आप 'int' मान के लिए भी '0'' का उपयोग कर सकते हैं। –

+0

@ निकोस चान्तिजारास मैं लिंक किए गए उत्तर में चर्चा के कारण पूछ रहा हूं, और जब मैं '48' का उपयोग कर सकता हूं तो मैं 'int' के लिए '0'' का उपयोग क्यों करूं? –

उत्तर

16

नहीं। स्रोत या निष्पादन चरित्र के लिए एएससीआईआई सबसेट के साथ एन्कोडिंग का उपयोग करने के लिए कोई आवश्यकता नहीं है। मैंने किसी भी गैर-ASCII कार्यान्वयन को नहीं देखा है, लेकिन मैं किसी ऐसे व्यक्ति को जानता हूं जो किसी को जानता है। (यह आवश्यक है कि '0' - '9' में संगत पूर्णांक मान हों, लेकिन यह SO पर कहीं और एक डुप्लिकेट प्रश्न है।)

स्रोत वर्ण सेट के लिए उपयोग किया जाने वाला एन्कोडिंग नियंत्रित करता है कि आपके स्रोत कोड के बाइट्स का अर्थ कैसे होता है सी ++ भाषा में इस्तेमाल वर्णों में। मानक निष्पादन चरित्र के मानों के मान के रूप में सदस्यों का वर्णन करता है। यह एन्कोडिंग है जो इन वर्णों को उनके संबंधित मानों पर मैप करती है जो '0' के पूर्णांक मान को निर्धारित करती है।

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

+3

+1 क्योंकि आप एक ऐसे लड़के को जानते हैं जो एक लड़के को जानता है। –

+0

मुझे एक डेटाफाइल को एक बार वैकल्पिक वर्ण सेट करने की प्रक्रिया करना पड़ा (मुझे नहीं लगता कि यह ईबीसीडीआईसी भी था)। लेकिन मैंने एएससीआईआईआई कंपाइलर का उपयोग करके ऐसा किया। –

+0

प्रश्न में अनुच्छेद 2.2/3 है " में 0 अंकों के बाद प्रत्येक वर्ण का मान दशमलव अंकों की सूची के ऊपर पिछले के मान से अधिक होगा।" –

11

नहीं, मानक बहुत सावधान नहीं है कि स्रोत वर्ण एन्कोडिंग क्या है।

सी और सी ++ कंपाइलर्स ईबीसीडीआईसी कंप्यूटर पर भी चलते हैं, आपको पता है, '0' != 0x30

हालांकि, मुझे विश्वास है कि '1' == '0' + 1 आवश्यक है।

+1

हां '' 1 '==' 0 '+ 1' आवश्यक है (§2.3/3)। – kennytm

+0

यह भी दर्शाता है कि '5' - '0' == 5', जो चरित्र अंकों से संख्याओं में कनवर्ट करने के लिए अच्छी विधि है। –

3

यह 0xF0 ईबीसीडीआईसी में है। मैंने कभी ईबीसीडीआईसी संकलक का उपयोग नहीं किया है, लेकिन मुझे बताया गया है कि वे थोड़ी देर के लिए आईबीएम में सभी क्रोध थे।

सी ++ मानक में कोई आवश्यकता नहीं है कि स्रोत या निष्पादन एन्कोडिंग ASCII- आधारित हैं। यह गारंटी है कि '0' == '1' - 1 (और सामान्यतः कि अंक संगत और क्रम में हैं)। यह गारंटी है कि पत्र संगत हैं, और वास्तव में ईबीसीडीआईसी 'J' != 'I' + 1 और 'S' != 'R' + 1 में हैं।

+0

आप एक उपयुक्त कंपाइलर विकल्प पास करके आसानी से जीसीसी को एक ईबीसीडीआईसी- (या कुछ भी) एन्कोडेड स्रोत फ़ाइल संकलित कर सकते हैं। –

+0

@KerrekSB: '-fexec-charset' है जो बाइनरी में स्ट्रिंग स्थिरांक के एन्कोडिंग को प्रभावित करता है, साथ ही चरित्र हैंडलिंग फ़ंक्शन (जैसे' isdigit'), लेकिन स्रोत एन्कोडिंग में कौन सा विकल्प बदलता है? –

+0

'-फिनपूट-वर्णसेट' भी है। –

2

सी ++ 11 stardard N3225

बुनियादी स्रोत वर्ण सेट के सदस्यों के लिए ग्लिफ़ के अनुसार आईएसओ/आईईसी 10646 के सबसेट जो ASCII से मेल खाती है से पात्रों की पहचान करना है अक्षरों का समूह। हालांकि, क्योंकि स्रोत से मानचित्रण फाई स्रोत वर्ण सेट (में अनुवाद चरण 1 में वर्णित) के लिए ले पात्रों विशिष्ट कार्यान्वयन-de फाई नेड के रूप में एड है, एक कार्यान्वयन दस्तावेज़ के लिए कैसे बुनियादी स्रोत पात्रों स्रोत में प्रतिनिधित्व कर रहे हैं की आवश्यकता है फाई लेस

संक्षेप में, वर्ण सेट ASCII तालिका में मैप किया जाने की आवश्यकता नहीं है, भले ही मैं किसी भी अलग कार्यान्वयन के बारे में कभी नहीं सुना है

संबंधित मुद्दे