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

십진수를 이진수로 빠르게 변환하기

바로이순간 2011. 12. 7. 17:51

#include <stdio.h>

int main() {

    char *htab[16]={" ","1","10","11","100","101","110","111",

                    "1000","1001","1010","1011","1100","1101","1110","1111"};

    char *btab[16]={"0000","0001","0010","0011","0100","0101","0110","0111",

                    "1000","1001","1010","1011","1100","1101","1110","1111"};

    unsigned value, x;

    int i; 


    printf("Enter decimal number: ");

    scanf("%d",&value);

 

    i=sizeof(int)*8-4;

    while((15&(value>>i))==0) {

        i-=4;

    }

 

    x=15&(value>>i);

    printf("%s",htab[x]);

    i-=4;

 

    while(i>=0) {

        x=15&(value>>i);

        printf("%s",btab[x]);

        i-=4;

    }

    return 0;

}


음수를 입력해도 잘돌아 갑니다.


처음 i가 가지는 값은 최상위 4비트의 위치를 나타냅니다.

 

앞부분은 htab을 이용해서 찍어 줍니다. 앞부분에는 1이 나오기 전의 0은 찍어 주지 않습니다.

뒷부분은 btab을 이용해서 찍어 줍니다. 이부분에는 모든 비트를 다 찍어 줍니다.


최상위 비트부터 4비트씩 잘라서 0이 아닌 비트가 나오는 위치부터 4비트씩 출력을 해줍니다.

그 후 오른쪽으로 쉬프트되는 수 i는 4씩 감소해서 0이 될때 까지 반복하게 됩니다.