Вывести целое число в C / C++ [дубликат]


На этот вопрос уже есть ответ здесь:

У меня есть простая программа.

#include <cstdio>
int main()
{
   int num = 000012345; printf("%dn",num);
   return 0;
}

Приведенная выше программа дает 5349. Почему? Я имею в виду, что это должно быть неправильно, но почему 5349 ?

2 3

2 ответа:

Числа, начинающиеся с 0, являются восьмеричными в языке c/c++.

Octal  = 000012345
Decimal= 0×8⁸+0×8⁷+0×8⁶+0×8⁵+1×8⁴+2×8³+3×8²+4×8¹+5×8⁰ = 5349
Binary = 1010011100101
Hex    = 14E5

Число, начинающееся с одного или нескольких ведущих нулей, задает восьмеричный формат вместо десятичного. Так что 000012345-это 1 * 8^4 + 2 * 8^3 + 3 * 8^2 + 4 * 8^1 + 5 * 8^0 = 5349.

Аналогично, число, начинающееся с 0x, имеет шестнадцатеричный формат.