Member 12702056 Ответов: 1

Почему последний шестнадцатеричный результат равен 0*43? Почему не 43?


#include<iostream>
using namespace std;
int main()
{
	int x;
	cout<<"Enter an int:";
	cin>>x;
	cout<<hex<<x<<endl
	    <<oct<<x<<endl;
	cout<<x<<endl;
	cout<<showbase<<dec<<x<<endl;
	cout<<showbase<<hex<<x;
	return 0;
}


Мой вопрос заключается в том, почему последний шестнадцатеричный результат равен 0*43?
потому что результат этой программы таков:
Введите интервал:67
43
103
103
67
0x43

Что я уже пробовал:

Я искал об этом, и я увидел такой результат:"когда showbase формате флаг установлен, численные целочисленных значений вложено в выходной потоки имеют префикс с той же приставки, используемый в C++ литеральные константы: значение 0x для шестнадцатеричных значений (см. шестигранный), 0 для восьмеричных значений (см. октября) и приставки для десятичных-базовые значения (см. декабрь)."
Но есть ли у этого особая причина, что 0*или для восьмеричного оно должно быть с 0?

1 Ответов

Рейтинг:
10

barneyman

вы сами ответили на свой вопрос

это 0x43 потому что showbase вставляет 0x

Ты не пользуешься showbase на восьмеричном cout - если бы это было так, Линия №2 была бы такой 0103


(и это "х", а не"*")


Member 12702056

Спасибо за ваш ответ.Я понял, что это из-за showbase,но есть ли у этого особая причина,почему showbase должен вставить этот 0x для шестнадцатеричных, 0 для восьмеричных чисел?

barneyman

потому что это стандартный способ выражения шестнадцатеричного и восьмеричного чисел в программировании