Qualquer valor inteiro prefixado com 0
é um valor octal. Ou seja: 01 é octal 1, 010 é octal 10, que é decimal 8 e 0 é octal 0 (que é decimal, e qualquer outro, 0).
Então sim, '0' é um octal.
Essa é uma tradução simples em inglês do snippet de gramática na resposta da @ Als :-)
Um número inteiro prefixado com não0x
é prefixado com . é um prefixo explicitamente diferente. Aparentemente, existem pessoas que não podem fazer essa distinção.0
0x
Conforme esse mesmo padrão, se continuarmos:
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