0是十进制文字还是八进制文字?

时间:2011-08-01 07:46:26

标签: c++ zero octal

零始终为零,所以没关系。但在最近与我的朋友讨论时,他说今天几乎没有使用八进制文字。然后我突然意识到,我的代码中的所有整数文字实际上都是八进制,即0

根据C ++语法,0是八进制文字吗?标准说了什么?

3 个答案:

答案 0 :(得分:289)

是的,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

答案 1 :(得分:44)

前缀为0的任何整数值都是八进制值。 I.e。:01是八进制1,010是八进制10,是十进制8,0是八进制0(十进制,任何其他,0)。

是的,'0'是八进制。

这是@ Als答案中语法片段的简单英文翻译: - )


前缀为0x的整数前缀为00x是明确不同的前缀。显然有些人无法做出这种区分。

按照同样的标准,如果我们继续:

 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

答案 2 :(得分:-1)

显然所有以零开头的整数文字实际上是八进制的。这意味着它也包含0。由于零为零,这几乎没有区别。但不知道这个事实会伤害你。

当我试图编写一个程序来将二进制数转换为十进制和十六进制输出时,我意识到了这一点。每当我给出一个以零开头的数字时,我得到的输出错误(例如,012 = 10,而不是12)。

了解这些信息是件好事,这样你就不会犯同样的错误。