Использование C ++ hex и cin - PullRequest
4 голосов
/ 05 марта 2010

Если у вас есть следующий код:

cout << hex << 10;

Выходное значение равно 'a', что означает, что десятичное число 10 преобразуется в его шестнадцатеричное значение.

Однако, в коде ниже ...

int n;
cin >> hex >> n;
cout << n << endl;

Когда ввод равен 12, вывод становится 18. Может кто-нибудь объяснить детали преобразования? Как это стало десятичным значением?

Меня интересует момент, когда он стал int. Если разбить, это будет:

(( cin >> hex ) >> n);

Это правильно?

Ответы [ 3 ]

8 голосов
/ 05 марта 2010

Шестнадцатеричный манипулятор контролирует только то, как читается значение - оно всегда сохраняется с использованием одного и того же внутреннего двоичного представления. Переменная не может «запомнить», что она была введена в шестнадцатеричном формате.

6 голосов
/ 05 марта 2010

Он читает 0x12 (шестнадцатеричное значение) и сохраняет его в n, которое вы затем печатаете в десятичном виде. Переменные просто содержат значения, они не содержат информации о базе (фактически они хранят все в базе 2).

6 голосов
/ 05 марта 2010

«12» в шестнадцатеричном формате - это «18» в десятичном виде. Когда вы вводите «12» в шестнадцатеричный поток cin, внутреннее значение равно 18 десятичному. Когда вы выводите в поток, который по умолчанию является десятичным, вы видите десятичное значение - «18».

...