这让我很困惑,我希望你们中的一个可以回答我的问题。这段代码怎么会产生输出“116”?
#include <iostream>
int main()
{
std::cout << 0164 << std::endl;
return 0;
}
代码已在 Mac OS X 下使用 MSVC++ 2010 和 g++ 编译。“cout”可以单独打印“0”和单独打印“164”,但只要“0”是数字中的第一个数字,输出就会发生变化。
这让我很困惑,我希望你们中的一个可以回答我的问题。这段代码怎么会产生输出“116”?
#include <iostream>
int main()
{
std::cout << 0164 << std::endl;
return 0;
}
代码已在 Mac OS X 下使用 MSVC++ 2010 和 g++ 编译。“cout”可以单独打印“0”和单独打印“164”,但只要“0”是数字中的第一个数字,输出就会发生变化。
在 C 及其兄弟中,0
前面带的数字是八进制,而不是十进制。
因此,您的数字等于。1 * 82 (1 * 64 = 64) plus 6 * 81 (6 * 8 = 48) plus 4 * 80 (4 * 1 = 4)
116
有关C 中十六进制和八进制是什么的大型论文,请参见此处。