Программирование. Принципы и практика использования C++ Исправленное издание, стр. 155
cout << showbase << dec; // показывать базыcout << 1234 << '\t' << hex << 1234 << '\t' << oct << 1234 << '\n';В результате получим следующий вывод:
1234 4d2 23221234 0x4d2 02322Итак, десятичные числа не имеют префиксов, восьмеричные числа имеют префикс 0, а шестнадцатеричные числа имеют префикс
0x0Xcout << 1234 << '\t' << 0x4d2 << '\t' << 02322 << '\n';В десятичном виде эти числа выглядели бы так:
1234 1234 1234Как вы могли заметить, манипулятор
showbaseocthexnoshowbaseshowbaseИтак, существует несколько манипуляторов вывода.

11.2.2. Ввод целых чисел
По умолчанию оператор
>>int a;int b;int c;int d;cin >> a >> hex >> b >> oct >> c >> d;cout << a << '\t' << b << '\t' << c << '\t' << d << '\n';Если набрать на клавиатуре числа
1234 4d2 2322 2322то программа выведет их так:
1234 1234 1234 1234Обратите внимание на то, что при вводе манипуляторы
octdechexПОПРОБУЙТЕ
Завершите фрагмент кода, приведенный выше, и преобразуйте его в программу. Попробуйте ввести предлагаемые числа; затем введите числа
1234 1234 1234 1234Объясните результат. Попробуйте ввести другие числа, чтобы увидеть, что произойдет.
Для того чтобы принять и правильно интерпретировать префиксы
00x>>cin.unsetf(ios::dec); // не считать десятичным // (т.е. 0x может означать // шестнадцатеричное число)cin.unsetf(ios::oct); // не считать восьмеричным // (т.е. 12 может означать двенадцать)cin.unsetf(ios::hex); // не считать шестнадцатеричным // (т.е. 12 может означать двенадцать)Функция-член потока
unsetf()cin >>a >> b >> c >> d;и введете
1234 0x4d2 02322 02322то получите
1234 1234 1234 123411.2.3. Вывод чисел с плавающей точкой
Если вы непосредственно работаете с аппаратным обеспечением, то вам нужны шестнадцатеричные числа (и, возможно, восьмеричные). Аналогично, если вы проводите научные вычисления, то должны форматировать числа с плавающей точкой. Они обрабатываются манипуляторами потока
iostreamcout << 1234.56789 << "\t\t(общий)\n" // \t\t — выравнивание столбцов << fixed << 1234.56789 << "\t(фиксированный)\n" << scientific << 1234.56789 << "\t(научный)\n";В итоге получим следующие строки:
1234.57 (общий)1234.567890 (фиксированный)1.234568e+003 (научный)Манипуляторы
fixedscientificgeneralstd_lib_facilities.hinline ios_base& general(ios_base& b) // фиксированный и научный // формат // сбрасывает все флаги формата с плавающей точкой