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