web-dev-qa-db-ja.com

0は10進リテラルですか、8進リテラルですか?

ゼロは常にゼロであるため、問題ではありません。しかし、私の友人との最近の議論で、彼は今日、8進数リテラルはほとんど使われていないと言った。それから、実際にほとんどall私のコードの整数リテラルare 8進数、つまり0

0 C++文法に従った8進リテラル?標準は何と言っていますか?

323
ybungalobill

はい、 0は、C++のオクタルリテラルです。

C++標準に従って:

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
289
Alok Save

0で始まる整数値は8進数値です。つまり、01は8進数1、010は8進数10、10進数8、0は8進数0(10進数、その他0)です。

はい、「0」は8進数です。

@Alsの答えの文法スニペットの平易な英語翻訳です:-)


0xで始まる整数はnot0で始まるです。 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
44
littleadv