3 回答
TA贡献1825条经验 获得超4个赞
是的,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
TA贡献1872条经验 获得超3个赞
任何带前缀的整数值0都是八进制值。即:01是八进制数1,010是八进制数10,即十进制数8,而0是八进制数0(即十进制数,其他为0)。
所以是的,“ 0”是八进制。
那是@Als的答案中语法片段的简单英语翻译:-)
一个整数前缀0x是没有前缀0。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
TA贡献1801条经验 获得超16个赞
显然所有以零开头的整数文字都是八进制的。这意味着它也包括0。由于零为零,因此差异不大。但是不知道这个事实会伤害您。
当我尝试编写将二进制数字转换为十进制和十六进制输出的程序时,我意识到了这一点。每当我给出从零开始的数字时,我都会得到错误的输出(例如012 = 10,而不是12)。
很高兴知道这些信息,这样您就不会犯同样的错误。
- 3 回答
- 0 关注
- 944 浏览
添加回答
举报