请给我C ++ cout输出说明

时间:2012-01-28 10:00:02

标签: c++ octal

  

可能重复:
  why is initializing an integer in VC++ to 010 different from initialising it to 10?

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

#include <iostream>

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

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

2 个答案:

答案 0 :(得分:12)

因为前面的0使得数字被解释为octal

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

或者,通过二进制:

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

同样适用于hexadecimal numbers,例如,将它们写为0x1FA。

答案 1 :(得分:2)

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

因此,您的号码为1 * 82 (1 * 64 = 64) plus 6 * 81 (6 * 8 = 48) plus 4 * 80 (4 * 1 = 4),相当于116

有关C中十六进制和八进制的大型论文,请参阅here