Бинарное дополнение в c, почему возникает ошибка времени выполнения? - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь написать код, который может преобразовать 2 десятичных числа от 0 до 1 в двоичное, затем добавить их и распечатать двоичные значения для 2 начальных чисел И окончательной суммы.Он компилируется без проблем, однако, когда я запускаю его, он падает сразу после того, как он конвертирует и печатает num1 и num2 (начальные числа), я не могу найти проблему.общая формула для двоичного сложения такова:

* i-й бит суммы = i-й бит двоичного кода 1 + i-й бит двоичного кода 2 + коэффициент переноса (0 или 1)

, если сумма> 1, вычесть 2и добавьте 1 к следующей операции (это коэффициент переноса, о котором я упоминал ранее)

Ниже приведен код

#include <stdio.h>

// Converting decimal number to a binary number
void convertDecToBin(double num, int len, int binary[]) {

    // this function STORES conversion result in binary[]

    double tmp = num;
    binary[0] = 0;
    for (int i = 0; i < len; i++) {
        tmp *= 2;
        binary[i + 1] = tmp >= 1;
        if (tmp >= 1) {
            tmp -= 1;    
        }
    }

}


// Binary number addition
void addTwoBinary(int binary1[], int binary2[], int sum[]) {

    int tmp;
    int carry;

    for (unsigned int i = 20; i >= 0; i--) {
        if (i == 20 || tmp <= 1) {
            carry = 0;
        }
        else if (tmp > 1) {
            carry = 1;
        }
        sum[i] = binary1[i] + binary2[i] + carry;
        tmp = sum[i];
        if (sum[i] > 1) {
            sum[i]-=2;
        }
    }
}

//Printing the numbers
void PrintBinary(int binary[], int len) {
    for (unsigned int i = 0; i < len; i++) {
            printf("%d", binary[i]);

    }
}

int main(void) {

    double num1, num2;
    int binary1[30], binary2[30], sum[30];

    scanf("%lf", &num1);
    scanf("%lf", &num2);

    convertDecToBin(num1, 30, binary1);
    convertDecToBin(num2, 30, binary2);

    printf("num1 is ");
    PrintBinary(binary1, 21);
    printf("\nnum2 is ");
    PrintBinary(binary2, 21);

    addTwoBinary(binary1, binary2, sum);

    printf("\nsum is ");
    PrintBinary(sum, 21);

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