【问题标题】:C++ cout output explanation please [duplicate]C ++ cout输出解释请[重复]
【发布时间】:2012-02-21 02:20:07
【问题描述】:

可能重复:
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' 是数字中的第一个数字,输出就会改变。

【问题讨论】:

  • 谢谢大家,其实我从来没想过八进制的问题!对我来说最糟糕的是,既然你提到了,我已经知道了 :) 无论如何,谢谢你们所有人的帮助 :)

标签: c++ octal


【解决方案1】:

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

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

或者,通过二进制:

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

hexadecimal numbers 也是如此,例如将它们写为 0x1FA。

【讨论】:

    【解决方案2】:

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

    因此您的号码是1 * 8<sup>2</sup> (1 * 64 = 64) plus 6 * 8<sup>1</sup> (6 * 8 = 48) plus 4 * 8<sup>0</sup> (4 * 1 = 4),相当于116

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

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 2015-03-28
      • 2012-11-08
      • 2021-10-07
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      相关资源
      最近更新 更多