void를 int식으로 변환이 어렵습니다.

조회수 74회
#include <stdio.h>
#include <math.h>

void gwazemul(unsigned wn) {
    if (wn < 2) {
        printf("%d", wn);
    }
    else {
        gwazemul(wn / 2);
        printf("%d", wn % 2); 
    }

}
void gwazemul2(unsigned n) {
    unsigned a = 0x80000000;
    for (int i = 0; i < 32; i++) {
        if ((a & n) == a)
            printf("1");
        else
            printf("0");
        a >>= 1;
    }
}



int main() {

    printf(" **************************************************************************\n");
    printf(" **     *      *      *          *   *          *            *      *    **\n");
    printf(" **      *       *                                  *    *            ** **\n");
    printf(" **   *     *       *    *       booth 풀이 프로그램      *       *   *    **\n");
    printf(" **    *       *                                   *         *           **\n");
    printf(" **    *        *     *           *           *       *    *       *     **\n");
    printf(" ************************************************************************\n\n");

    printf("한번이라도 0을 기입하면 나갑니다.\n");
    printf("0은 어떤 수를 곱해도 0입니다!\n");

    while (1) {
        int a, b, i1, i2, a2, b2, b3 = 0;

        printf("\n10진수를 입력하시오 : ");
        scanf_s("%d", &a);
        printf("10진수를 입력하시오 : ");
        scanf_s("%d", &a2);
        printf("첫번째 입력값의 2진수 변환값 : ");


        for (i1 = 15; i1 >= 0; i1--) {
            b = 1 << i1;
            printf("%d", a & b ? 1 : 0);
            if (i1 % 4 == 0)
                printf(" "); // 16비트 2진수를 나타내는 함수입니다.
        }
        printf("(2)\n");
        printf("두번째 입력값의 2진수 변환값 : ");
        for (i2 = 15; i2 >= 0; i2--) {
            b2 = 1 << i2;
            printf("%d", a2 & b2 ? 1 : 0);
            if (i2 % 4 == 0) 
                printf(" "); // 16비트 2진수를 나타내는 함수입니다.
        }
        printf("(2)");
        printf("\n\n2번째 10진수의 2진수를 기입해주세요! (16자리)\n");
        printf("비트 당 1회 씩 엔터를 총 16번 쳐야하는 번거로움이 있습니다. 양해바랍니다..\n");

        int j[17];
        int i4 = 0;
        //변수와 배열을 선언하는데 배열은 숫자 10개가 입력되므로 그것보다 약간 큰 11로 잡는다.
        for (i4 = 1; i4 <= 16; i4++) { // 2의 승수를 비트별로 차례대로 넣는 함수입니다.
            printf("%d", i4);
            printf("번째 비트 : ");
            scanf_s("%d", &j[i4]); 

        }
        printf("\n  ");
        for (i1 = 15; i1 >= 0; i1--) { // 16비트 2진수를 나타내는 함수입니다.
            b = 1 << i1;
            printf("%d", a & b ? 1 : 0);
            if (i1 % 4 == 0)
                printf(" ");
        }
        printf("(2)\n");
        printf("X ");
        for (i2 = 15; i2 >= 0; i2--) { // 16비트 2진수를 나타내는 함수입니다.
            b2 = 1 << i2;
            printf("%d", a2 & b2 ? 1 : 0);
            if (i2 % 4 == 0)
                printf(" ");


        }
        printf("(2)");
        printf("\nㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");

        if (a > 32767) {
            printf("\n");
            printf("나갑니다~\n");
            return 0;
        }
        else if (a2 > 32767) {
            printf("\n");
            printf("나갑니다~\n");
            return 0;
        }
        else if (a == 0) {
            printf("\n");
            printf("나갑니다~\n");
            return 0;
        }
        else if (a2 == 0) {
            printf("\n");
            printf("나갑니다~\n");
            return 0;
        }
        else if (a < -32767) {
            printf("\n");
            printf("나갑니다~\n");
            return 0;
        }
        else if (a2 < -32767) {
            printf("\n");
            printf("나갑니다~\n");
            return 0;
        }
        else {
            printf("\n");
            int i = 0;


            for (i = 0; i < 16; i++) { // for 문을 사용해 1~16자리까지 값을 비교하고 출력하는 함수입니다.

                int iezoa1= 0;                            
                iezoa1 = pow(2, i);

                int eeee = 0;


                if (i == 0) {
                    if (j[16-i] == 1) {
                        printf("     ");
                        gwazemul2(-(a * iezoa1)); // 문제의 void 함수입니다. int형식으로 바꾸고 싶은데 방법을 모르겠습니다..
                        printf("(2) = ");
                        printf("%d", -(a * iezoa1));
                        printf("  <");
                        printf("%d", i + 1);
                        printf("번째 값>\n");
                    }    
                    else {
                        printf("     ");
                        gwazemul2(0);
                        printf("(2) = ");
                        printf("%d", (0));
                        printf("  <");
                        printf("%d", i + 1);
                        printf("번째 값>\n");

                    }
                }

                else if (j[16 - i] == 1 && j[17 - i] == 0) {
                    printf("     ");
                    gwazemul2(-(a * iezoa1));
                    printf("(2) = ");
                    printf("%d", -(a * iezoa1));
                    printf("  <");
                    printf("%d", i + 1);
                    printf("번째 값>\n");
                }
                else if (j[16 - i] == 0 && j[17 - i] == 1) {
                    printf("     ");
                    gwazemul2(a * iezoa1);
                    printf("(2) = ");
                    printf("%d", a * iezoa1);
                    printf("  <");
                    printf("%d", i + 1);
                    printf("번째 값>\n");
                }
                else if (j[16 - i] == 1 && j[17 - i] == 1) {
                    printf("     ");
                    gwazemul2(0);
                    printf("(2) = ");
                    printf("%d", 0);
                    printf("  <");
                    printf("%d", i + 1);
                    printf("번째 값>\n");
                }
                else if (j[16 - i] == 0 && j[17 - i] == 0) {
                    printf("     ");
                    gwazemul2(0);
                    printf("(2) = ");
                    printf("%d", 0);
                    printf("  <");
                    printf("%d", i + 1);
                    printf("번째 값>\n");
                }
                else {
                    printf("     ");
                    gwazemul2(0);
                    printf("(2) = ");
                    printf("%d", 0);
                    printf("  <");
                    printf("%d", i + 1);
                    printf("번째 값>\n");
                }

            }
            printf("%d", b);
            printf("ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ");
            printf("\n답 : ");
            gwazemul2(a * a2);
            printf("(2) = ");
            printf("%d", a * a2);
            printf("\n");

        }
    }
}

피승수, 승수 10진수 값을 각 각 입력받고 승수의 2진법 비트를 배열로 입력받은 상태에서 각 자리별로 비교하고 곱셈을 하는 Booth 알고리즘을 만들고 있습니다. 순서별로 출력은 가능한데, 누적 합을 구하는 방법을 모르겠어서 질문드립니다. void 함수 값인 gwazemul2(n);을 int 형식으로 바꾸는 방법이 있을까요? 누적값을 받는다면 더 나은 식을 만들 수 있을 거 같습니다.

출력하고 싶은 부분은 예를 들면 1번째 + 2번째 계산 후 +3번째 +4번째... +16번째 이런 식으로 누적해서 계속 더하고 싶은데 쉽지가 않습니다.

  • if 함수가 너무 많아서 헤갈릴 수 있습니다.. 최대한 줄일려 했지만 실력이 많이 후달립니다.
  • 사이트 코드 실행기로 오류가 나서 콘솔에 뜨는 과정을 첨부하였습니다. 프로그램은 비주얼 스튜디오로 실행했습니다.

이미지 이미지

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.