为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
波斯汪 2019-10-15 16:10:27
零永远是零,所以没关系。但是在最近与一位朋友的讨论中,他说八进制文字如今几乎没有使用。†然后我发现实际上我的代码中几乎所有整数文字都是八进制的,即0。0根据C ++语法,八进制文字是否正确?标准怎么说?†我知道的唯一真正用途是用于UNIX文件权限
查看完整描述

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


查看完整回答
反对 回复 2019-10-15
?
守着一只汪

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


查看完整回答
反对 回复 2019-10-15
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

显然所有以零开头的整数文字都是八进制的。这意味着它也包括0。由于零为零,因此差异不大。但是不知道这个事实会伤害您。


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


很高兴知道这些信息,这样您就不会犯同样的错误。


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 944 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信