В C++, если вы выполняете cout << 47, он печатает 47, но если вы выполняете cout << 047, он печатает 39, что составляет 47 в гектадикале. Почему это? Почему компилятор превращает его в гектадикальный, если вы размещаете независимо от того, сколько нулей перед номером. Это конвенция?
Ведущее "0" указывает, что число равно восьмеричным.
#include <iostream>
int main( int, char ** )
{
std::cout << 0x10 << std::endl;
std::cout << 020 << std::endl;
std::cout << 16 << std::endl;
return( 0 );
}
Все производят вывод 16. Цифры - это литералы, которые имеют одинаковое значение.
<<
просто видит номер. Компилятор определяет, что целочисленная константа 047
находится в восьмеричном виде, и соответственно создает значение.
Если вы префикс своих чисел с 0
, он будет в восьмеричном или базовом 8.
Если вы префикс своих чисел 0x
он будет в шестнадцатеричном или базовом 16.
Я не знаю, что префикс для 'hectadecimal' (base 110) есть, я не думаю, что есть один
047
39 написано в восьмеричном. вC
иC++
числа, начинающиеся с цифры0
являются восьмеричными (основание 8). (И вы имеете в виду "шестнадцатеричное" (основание 16), а не "шестнадцатеричное" :))