как понять формат cout по умолчанию - PullRequest
1 голос
/ 30 октября 2019

Надеюсь, это не наивный вопрос. Преобразование типов выполняется неявно в C ++? Поскольку я попросил пользователя ввести число в шестнадцатеричном формате, а затем, когда я выведу это число на экран, не упоминая его формат, оно будет отображаться в десятичном формате. Я что-то здесь упускаю?

#include <iostream>
#include <iomanip> using namespace std; 

int main() { int number = 0; 
             cout << "\nEnter a hexadecimal number: " << endl; 
              cin >> hex >> number;
            cout << "Your decimal input: " << number << endl; number; 
                }

1 Ответ

1 голос
/ 30 октября 2019

Здесь нет преобразования типов между шестнадцатеричным и десятичным. Внутренне ваш номер будет храниться в двух дополнительных (двоичное представление) независимо от того, было ли оно прочитано как шестнадцатеричное или десятичное число. Преобразование из строки dec / hex в целое число и наоборот происходит, когда число вводится / выводится.

С std::hex вы указываете потоку, что говорите потоку изменить его числовую базу по умолчанию дляцелочисленный ввод / вывод. Без этого по умолчанию используется десятичное число. Так что если вы делаете это только для std::cin, то он читает числа в шестнадцатеричном формате, но std::cout по-прежнему выводит десятичные числа. Если вы хотите, чтобы оно также изменило свою базу на шестнадцатеричное, вы должны сделать то же самое с std::cout:

std::cout << std::hex << "Your hexadecimal input: " << number << std::endl;
...