Преобразование десятичного числа в двоичное в C ++ - PullRequest
0 голосов
/ 02 ноября 2018

этот код находит двоичный код десятичного целого числа N; он делит число на 2, получает результат и делит его также на 2,
код получает остаток от этих делений 0 или 1 и создает двоичный файл.

Проблема с этим кодом состоит в том, что он не будет работать до последнего примера деления (возьмите 128, последнее деление равно 1/2, а остаток равен 1, программа останавливается на N/2 > 0, как указано в цикле while и 1/2 = 0, поскольку 1 имеет тип int).

Как мне решить эту проблему или как изменить условие в цикле while?

#include <iostream>
using namespace std;
void ConvertToBinary(int N);
int main()
{
    int N = 1;
    while (1)
    {
        cout << "enter N: ";
        cin >> N;
        cout << endl;
        ConvertToBinary(N);
        cout << endl;
    }
    system("pause");
    return 0;
}
void ConvertToBinary(int N)
{
    int A[1000];
    int i=0;
    cout << "The binary of " << N << "= ";
    while (N / 2 > 0)
    {
        if (N % 2 == 0)
        {
            A[i] = 0;
        }
        else if (N % 2 != 0)
        {
            A[i] = 1;
        }
        N = N / 2;
        i++;
    }
    for (int j= i-1 ; j>=0 ; j--)
    {
        cout<<A[j];
    }


    cout << endl;

}

1 Ответ

0 голосов
/ 02 ноября 2018

N не является десятичным целым числом. Это число .

Если вы действительно хотите поговорить о специфике, она уже хранится в двоичном формате.

То, о чем вы говорите, это представление . Что такое представление числа при выводе на экран? IOStreams по умолчанию покажет вам цифры в десятичном виде.

Вы можете использовать Манипуляторы ввода / вывода, чтобы вместо этого выбрать шестнадцатеричный или восьмеричный. К сожалению, пока нет std::bin , но мы можем использовать std::bitset для той же цели:

#include <iostream>
#include <iomanip>
#include <bitset>

int main()
{
    int x = 42;
    std::cout << x << '\n';
    std::cout << std::hex << x << '\n';
    std::cout << std::oct << x << '\n';
    std::cout << std::bitset<sizeof(x)>(x) << '\n';
}

// Output:
//   42
//   2a
//   52
//   1010

( живая демонстрация )

И весь ваш подход («подделать» сдвиг представления путем изменения вашего номера на другое число, которое выглядит как двоичное представление исходного числа при печати его в десятичном представлении & ndash; фу!), Устареет, решив Ваша проблема без усилий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...