c·c++/c 프로그래밍

진법변환

바로이순간 2012. 10. 11. 09:45

#include <stdio.h> 

int bin2dec(char a[]); 

void tobinstr(char a[], int); 

int main() { 

    int n, menu=1;

    char numstr[100]={0,};


    while(menu!=7) { 

        puts("***********************"); 

        puts("*1.  2진수-> 8진수로: "); 

        puts("*2.  2진수->10진수로: "); 

        puts("*3.  8진수-> 2진수로: "); 

        puts("*4.  8진수->10진수로: "); 

        puts("*5. 10진수-> 2진수로: "); 

        puts("*6. 10진수-> 8진수로: "); 

        puts("*7. 끝내기"); 

        puts("***********************"); 

        printf("선택="); 

        scanf("%d", &menu); 

        fflush(stdin); 

        switch(menu) { 

            case 1: 

                printf("2진수입력: ");

                gets(numstr);

                n=bin2dec(numstr); 

                printf("8진수: %o\n", n);

                break; 

            case 2: 

                printf("2진수입력: ");

                gets(numstr);

                n=bin2dec(numstr); 

                printf("10진수: %d\n", n);

                break; 

            case 3: 

                printf("8진수입력: ");

                scanf("%o", &n); 

                tobinstr(numstr, n);

                printf("이진수: %s\n", numstr);

                break; 

            case 4: 

                printf("8진수입력: ");

                scanf("%o", &n); 

                printf("10진수: %d\n", n);

                break; 

            case 5: 

                printf("십진수입력: ");

                scanf("%d", &n); 

                tobinstr(numstr, n);

                printf("이진수: %s\n", numstr);

                break; 

            case 6: 

                printf("십진수입력: ");

                scanf("%d", &n); 

                printf("8진수: %o\n", n);

                break; 

        } 

    }


    return 0;


// 주어진 2진수를 나타내는 문자열을 정수로 바꾸는 함수입니다.

int bin2dec(char a[]) { 

    // 문자열의 인덱스를 위한 변수 i 정수값을 위한 변수 x

    int i=0, x=0;


    // 문자열의 끝을 만날때 까지 가면서

    while(a[i]) {

        // 지금까지 읽은(처리한) 문자열 다음에 문자가 나오면 정수의 값은 2배가 되

        // 현재 문자가 '0' 이거나 '1'이냐에 따라서 0이나 1이 더해지게 된다.

        x=x*2+a[i]-'0';


        i=i+1;   // 다음 문자로 가기 위해서 i를 증가시켜준다.

    }

    return x;

}


// 주어진 정수를 2진수를 나타내는 문자열로 바꾸어 주는 함수이다.

void tobinstr(char a[], int n) { 

    unsigned i=0, x=1;

    

    x=1<<31; // 최상위 비트만 1로 준다. 앞의 0비트를 출력하지 않기 위해서

    while((n&x)==0) x=x>>1; // n의 비트가 0 이라면 한 비트씩 내려옵니다. 


    // x의 값이 0 보다 클 경우 계속한다.

    while(x>0) {

        // 만약 n이 x가 나타내는 비트자리가 있다면 '1'을 없다면 '0'을 

        // 문자열에 넣어준다.

        if(n&x) a[i]='1'; else a[i]='0';

        // i의 값을 1증가 시킨다.

        i=i+1;

        // x를 오른쪽으로 한비트씩 보냅니다.

        x=x>>1;

    }

    // a는 문자열이기 때문에 마지막에 널문자를 넣어 준다.

    a[i]=0;

}

'c·c++ > c 프로그래밍' 카테고리의 다른 글

간단한 계산기  (0) 2012.10.19
Newton-Raphson Method  (0) 2012.10.13
달력출력  (0) 2012.10.10
원형큐  (0) 2012.10.08
c언어에서 %[^\n] 가 의미하는 것이 무엇인가요 ?  (0) 2012.10.08