c++ - 0 दशमलव दशमलव या एक ऑक्टल शाब्दिक है?




zero octal (4)

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

सी ++ व्याकरण के अनुसार 0 एक अंडाकार शाब्दिक है? मानक क्या कहता है?


Answers

0 साथ prefixed कोई भी पूर्णांक मान एक ऑक्टल मान है। Ie: 01 ऑक्टल 1 है, 010 ऑक्टल 10 है, जो दशमलव 8 है, और 0 ऑक्टल 0 है (जो दशमलव है, और कोई अन्य, 0)।

तो हाँ, '0' एक ऑक्टल है।

@ अलस के जवाब में व्याकरण स्निपेट का यह सादा अंग्रेजी अनुवाद है :-)

0x साथ prefixed एक पूर्णांक 0 साथ prefixed नहीं है0x एक स्पष्ट रूप से अलग उपसर्ग है। जाहिर है ऐसे लोग हैं जो इस भेद को नहीं बना सकते हैं।

उसी मानक के अनुसार, यदि हम जारी रखते हैं:

 integer-literal:
     decimal-literal integer-suffixopt
     octal-literal integer-suffixopt
     hexadecimal-literal integer-suffixopt
 decimal-literal:
     nonzero-digit                       <<<---- That's the case of no prefix.
     decimal-literal digit-separatoropt digit
 octal-literal:
     0                                    <<<---- '0' prefix defined here.
     octal-literal digit-separatoropt octal-digit <<<---- No 'x' or 'X' is
                                                          allowed here.
 hexadecimal-literal:
     0x hexadecimal-digit                 <<<---- '0x' prefix defined here
     0X hexadecimal-digit                 <<<---- And here.
     hexadecimal-literal digit-separatoropt hexadecimal-digit

हां, 0 सी ++ में एक अस्थायी शाब्दिक है।

सी ++ मानक के अनुसार:

2.14.2 इंटीजर अक्षर [lex.icon]

integer-literal:  
    decimal-literal integer-suffixopt  
    octal-literal integer-suffixopt  
    hexadecimal-literal integer-suffixopt  
decimal-literal:  
    nonzero-digit  
    decimal-literal digit  
octal-literal:  
    0                           <--------------------<Here>
    octal-literal octal-digit

जाहिर है शून्य से शुरू होने वाले सभी पूर्णांक अक्षर वास्तव में ऑक्टल हैं। इसका मतलब है कि इसमें 0 भी शामिल हैं। शून्य शून्य होने के कारण इससे थोड़ा अंतर होता है। लेकिन इस तथ्य को नहीं जानना आपको चोट पहुंचा सकता है।

मुझे यह एहसास हुआ जब मैं बाइनरी संख्याओं को दशमलव और हेक्साइडसिमल आउटपुट में परिवर्तित करने के लिए एक प्रोग्राम लिखने की कोशिश कर रहा था। हर बार जब मैं शून्य से शुरू होने वाला नंबर दे रहा था तो मुझे गलत आउटपुट मिल रहा था (उदाहरण के लिए, 012 = 10, 12 नहीं)।

इस जानकारी को जानना अच्छा है ताकि आप वही गलती न करें।


आधार निर्दिष्ट करें:

var number = parseInt(s, 10);






c++ zero octal