Моя функция преобразования десятичного числа в двоичное в (C) производит неправильный вывод для (некоторых чисел)! [Без массивов] - PullRequest
0 голосов
/ 17 марта 2020

У меня есть функция, которая должна преобразовывать десятичное число в двоичное. Дело в том, что для некоторых чисел он работает как вывод для:

27 = 00011011

, но для 5015 он конвертирует его в 82630143 вместо 1001110010111

Это моя функция:

int dec(int num) {
    long bNum = 0;
    int remNum, i = 1, highNum = 32768;
    while (num != 0) {
        remNum = num / highNum;
        remNum = num % 2;
        num /= 2;
        bNum = bNum + remNum * i;
        i = i * 10;
    }
    return bNum;
}

Буду признателен за любую помощь.

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Как прокомментировал mch, 1001110010111 - это большое число для целого числа. Вы можете попытаться сохранить его в переменной unsigned long long int, но на самом деле лучший способ - использовать массив символов или указатель символов.

1 голос
/ 17 марта 2020

вы должны проверить, какой из ваших переменных не хватает space для хранения ваших чисел. Я проверил и увидел, кроме bNum, что другим вашим переменным, таким как i, не хватает места:

посмотрите на это

unsigned long long int dec(int num) {
    unsigned long long int bNum = 0,i = 1;// i should be unsigned long long
    long int remNum,  highNum = 32768;//highNum is better to be long int 
    while (num != 0) {
        remNum = num / highNum;
        remNum = num % 2;
        num /= 2;
        bNum = bNum + remNum * i;
        i = i * 10;
    }
    return bNum;
}

и в вашем main проверьте, где вы храните возвращенный номер:

int main()
{
    unsigned long long int r;
    int a;
    scanf("%d", &a);
    r = dec(a);
}
...