2016-03-04 141 views
-3

我在CODEBLOCK上用C++编写了一个简单的程序。程序如下:为什么它会导致错误?

#include <iostream> 
using namespace std; 

int main() 
{ 
    int num = 09;    //ERROR: Invalid digit 9 in octal constant 
    cout << num << endl; 

    num = 08;    //ERROR: Invalid digit 9 in octal constant 
    cout << num << endl; 


    return 0; 
} 

此代码与上一个相同。但我已经改变了价值,写的NUM = 09,而不是015

我同意,如果我初始化(INT NUM = 015),它使输出的八路是13

但在上述程序,我试图初始化(int num = 09和num = 08)它给出错误,你可以看到。

首先,我想知道它为什么会产生一个ERROR以及如何?

其次是它背后的逻辑是什么?

请给我合适的例子,如果有的话。

+6

它使八进制。 – AlexD

+2

来吧伙计们,这是一个合法的问题,可能很难谷歌。至少将其标记为一个笨蛋而不是downvoting。 –

+2

@MattiVirkkunen我使用了“整数字面值前面的C++零”,答案包含在第一页结果的google预览中。 –

回答

6

前导零引起整数在C/C++中被解释为八进制数。十进制中的015是(1 * 8)+ 5 = 13。

+0

细节'0x9'具有前导'0',不是八进制。一些扩展包括'​​0b'作为二进制前缀。 – chux

0

8位基因的常量是这样定义的。 15 = 13 。