4

可能重复:
为什么在 VC++ 中将整数初始化为 010 与将其初始化为 10 不同?

这让我很困惑,我希望你们中的一个可以回答我的问题。这段代码怎么会产生输出“116”?

#include <iostream>

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

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

4

2 回答 2

12

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

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

或者,通过二进制:

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

十六进制数也是如此,例如将它们写为 0x1FA。

于 2012-01-28T10:00:38.000 回答
2

在 C 及其兄弟中,0前面带的数字是八进制,而不是十进制。

因此,您的数字等于。1 * 82 (1 * 64 = 64) plus 6 * 81 (6 * 8 = 48) plus 4 * 80 (4 * 1 = 4)116

有关C 中十六进制和八进制是什么的大型论文,请参见此处。

于 2012-01-28T10:02:52.817 回答