ゼロは常にゼロであるため、問題ではありません。しかし、私の友人との最近の議論で、彼は今日、8進数リテラルはほとんど使われていないと言った。それから、実際にほとんどall私のコードの整数リテラルare 8進数、つまり0
。
0
C++文法に従った8進リテラル?標準は何と言っていますか?
はい、 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
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