请给我C++ cout输出说明

Ben*_*min 4 c++ octal

可能重复:
为什么将VC++中的整数初始化为010而不是初始化为10?

这让我很困惑,我希望你们中的一个能回答我的问题.为什么这段代码会产生输出"116"?

#include <iostream>

int main()
{
    std::cout << 0164 << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该代码在Mac OS X下使用MSVC++ 2010和g ++编译."cout"可以单独打印'0'和'164',但很快'0'是输出更改的数字中的第一个数字.

Kon*_*rak 12

因为前面的0使得数字被解释为八进制.

0164 = 
 4 * 1 +
 6 * 8 + 
 1 * 64
 = 116
Run Code Online (Sandbox Code Playgroud)

或者,通过二进制:

 0164 =
   0   1   6   4 = 
 000 001 110 100 =
 1110100 = 
 116
Run Code Online (Sandbox Code Playgroud)

对于十六进制数字也是如此,例如,将它们写为0x1FA.