C++ cout输出解释请

4
这让我很困惑,希望你们中的一个能回答我的问题。为什么这段代码会输出“116”?
可能是重复问题:
为什么在VC++中将整数初始化为010与将其初始化为10不同?
#include <iostream>

int main()
{
    std::cout << 0164 << std::endl;
    return 0;
}

该代码已使用MSVC++ 2010和Mac OS X下的g++进行编译。 "cout"可以打印出单独的'0'和单独的'164',但只要'0'是数字的第一位,输出就会发生变化。

谢谢大家,我实际上从未想到八进制问题!对我来说最糟糕的部分是,现在你们提到了,我已经知道了 :) 无论如何,感谢你们所有人的帮助 :) - Benjamin
2个回答

12

由于前面的0使得数字被解释为八进制

0164 = 
 4 * 1 +
 6 * 8 + 
 1 * 64
 = 116

或者,通过二进制方式:

 0164 =
   0   1   6   4 = 
 000 001 110 100 =
 1110100 = 
 116

对于十六进制数同样适用,例如你可以写成0x1FA。


2
在C语言及其类似语言中,以数字0开头的数是八进制,而不是十进制。因此,你的数字是1 * 82 (1 * 64 = 64) 加上 6 * 81 (6 * 8 = 48) 加上 4 * 80 (4 * 1 = 4),即等于116。请参见此处了解关于C语言中十六进制和八进制的详细论述。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接