Преобразование десятичного числа в двоичное с длинными целочисленными значениями C - PullRequest
0 голосов
/ 28 сентября 2018

Моя программа предназначена для преобразования десятичного числа в двоичное путем считывания значений из входного файла и последующего вывода двоичных значений в выходной файл.Допустим, входной файл имеет следующие числа:

190 31 5 891717742

Все отлично преобразуется в двоичный, кроме 891717742. Это выводит значение, которое полностью отсутствует в двоичном выводе.Я пробовал долго, но они просто выводят отрицательное значение.Например, это выдает:

11000100 11110010 11 "1434923237" <- not right (not the actual binary values)

Десятичное значение в двоичное (из сети):

char* convertDecimalToBinary(int n)
{
  int binaryNumber = 0;
  int remainder, i = 1;
  static char buff[100];

    while (n!=0)
    {
        remainder = n%2;

        n /= 2;
        binaryNumber += remainder*i;
        i *= 10;
    }
    sprintf(buff, "%d", binaryNumber );
    return buff;
}

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Это довольно легко, можно сделать в два простых шага.

  1. Int в шестнадцатеричную строку
int main()
{
    int n=891717742;
    char buff[100];
    sprintf(buff, "%x", n);
    printf("\n buff=%s", buff);
    return 0;
}
От шестнадцатеричного к двоичному

Пожалуйста, посмотрите на это Как преобразовать шестнадцатеричную строку в двоичную строку в C

0 голосов
/ 28 сентября 2018

Основная проблема заключается в том, что вы пытаетесь использовать int для хранения вашего двоичного представления.Int - это просто целое число.В памяти он представлен в двоичном формате, но синтаксис C позволяет использовать литералы base 10 и base 16 при назначении или выполнении других операций над целыми числами.Это может создать впечатление, что оно не рассматривается как двоичное число, но это действительно так.В вашей программе вы путаете представление base 2 и представление base 10.891717742 (основание 10), преобразованное в двоичный код, является 110101001001101000100001101110. То, что ваш алгоритм по сути пытается сделать, это сохранить базовый номер 10 110101001001101000100001101110 в int.Это базовое число 10 больше, чем даже 64-битное число, на самом деле для его хранения потребуется 97 бит.

Отметьте этот ответ, чтобы увидеть, как вы можете распечатать двоичное представление типа int в C: Есть ли конвертер printf для печати в двоичном формате?

...