Десятичный в двоичный C ++

0

Мне хорошо известно, что есть несколько дублированных вопросов по этой теме, хотя каждый, что я нахожу, не решает проблему. Для одного я не могу использовать специальные библиотеки, кроме 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
  • 1
    Может быть сделано очень легко с помощью std::bitset::to_string()
  • 0
    Это уже существует или нуждается в библиотеке?
Показать ещё 3 комментария
Теги:
binary

1 ответ

1
Лучший ответ

Поскольку ответ @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;
}     
  • 0
    Кроме проблемы некоторых ваших кодов, профессор не любит вещей, которым он не учил. Что я и делаю много, потому что некоторое время программировал, на C ++ я новичок и поэтому я читаю документы, и такие случаи - eof () и unsigned, long, double, to_string. Я имею в виду, буквально, он просто научил их размеру и длине лол спасибо за твой пост хоть дружище.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню