Почему число понимается в шестнадцатеричном формате?

0

В C++, если вы выполняете cout << 47, он печатает 47, но если вы выполняете cout << 047, он печатает 39, что составляет 47 в гектадикале. Почему это? Почему компилятор превращает его в гектадикальный, если вы размещаете независимо от того, сколько нулей перед номером. Это конвенция?

  • 5
    047 39 написано в восьмеричном. в C и C++ числа, начинающиеся с цифры 0 являются восьмеричными (основание 8). (И вы имеете в виду "шестнадцатеричное" (основание 16), а не "шестнадцатеричное" :))
Показать ещё 8 комментариев
Теги:

2 ответа

6

Ведущее "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. Цифры - это литералы, которые имеют одинаковое значение.

  • 5
    Это не потоковый оператор, который понимает это. Оператор потоковой передачи << просто видит номер. Компилятор определяет, что целочисленная константа 047 находится в восьмеричном виде, и соответственно создает значение.
  • 1
    @EricFinn: у компилятора нет выбора в этом вопросе. Лексические правила языка предписывают это поведение.
Показать ещё 2 комментария
6

Если вы префикс своих чисел с 0, он будет в восьмеричном или базовом 8.

Если вы префикс своих чисел 0x он будет в шестнадцатеричном или базовом 16.

Я не знаю, что префикс для 'hectadecimal' (base 110) есть, я не думаю, что есть один

Ещё вопросы

Сообщество Overcoder
Наверх
Меню