Мне хорошо известно, что есть несколько дублированных вопросов по этой теме, хотя каждый, что я нахожу, не решает проблему. Для одного я не могу использовать специальные библиотеки, кроме iostream
, iomanip
и string
. Так что я до сих пор это
int DecToBin(int num)
{
int bin = 0;
while (num > 0)
{
bin += (num % 2);
//cout << bin << endl; this is used for debugging purposes
num = num / 2;
}
return bin;
}
И я называю это так
int binary = DecToBin(170);
cout << binary << endl;
Кроме того, я продолжаю получать 0, что, я считаю, связано с типом данных, который я тоже установил. Итак, мой вопрос: как мне получить правильный вывод? Также мои результаты должны быть
10101010 is base 10 of 170
Поскольку ответ @Cyber технически исправляет проблему, я думаю, это не помешает объяснить ваше недоразумение. Ваша функция DecToBin
не преобразует десятичную в двоичную, а скорее двоичную в какой-то странный двоичный формат, который печатается как десятичный, дает вам двоичное представление. Проблема в том, что числа, уже сохраненные в двоичном формате, и были преобразованы в двоичные файлы либо с помощью переводчика (если вы использовали константу в исходном коде), либо библиотекой io, если вы использовали std::cin
для ввода. Одна и та же библиотека преобразует ее обратно в десятичную (по умолчанию) из двоичной, когда вы печатаете ее на консоли с помощью std::cout
, что приводит к вашей идее, что число хранится в десятичном формате.
Технически ваше решение работает, но я не уверен, что ваш профессор согласится с ним, поскольку он показывает, что вы не понимаете концепцию (я бы этого не сделал). Правильным решением было бы преобразование int в двоичную строку, а затем вывод его в std::cout
:
std::string binary( unsigned int n )
{
std::string s;
for( ; n > 0; n /= 2 )
s = std::to_string( n % 2 ) + s;
return s;
}
int main()
{
int n = 170;
std::cout << "binary representation of " << n << " is " << binary( n )
<< std::endl;
}
std::bitset::to_string()