#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이 될때 까지 반복하게 됩니다.
'c·c++ > c 프로그래밍' 카테고리의 다른 글
이차원 배열을 동적으로 선언하여 사용하기 (0) | 2011.12.08 |
---|---|
무식한 c컴파일러 [이상한 출력 :: %d 로 3.1 을 찍을 때] (0) | 2011.12.08 |
랜덤키 만들기 (0) | 2011.12.07 |
데이터 파일 읽어오기 (0) | 2011.12.06 |
축값이 중간에 있을 경우의 partition (0) | 2011.12.06 |