반응형

C 언어, 십진수를 2진수로 출력하기

 

글. 오상문 sualchi@daum.net

 

십진수를 입력하면 이진수로 출력하는 예제입니다.

예를 들어, 아래 왼쪽 십진수를 이진수로 출력한 값이 오른쪽입니다.

 

0 --> 0

1 --> 1

2 --> 10

3 --> 11

...

255 --> 11111111

256 --> 100000000

 

예제 소스는 다음과 같습니다. 최상위 비트가 1인 변수를 만들고 그것을 십집수 값과 비트 연산하면서 1 또는 0을 출력합니다. 단, 앞쪽에서 1이 나오기 전까지의 0을 무시하고 출력하지 않습니다. 그리고 0이 입력된 경우에는 그냥 0을 출력하고 종료합니다.

 

#include <stdio.h>

 

int main(void)

{
  unsigned int bit = 1;  // 쉬프트 연산 때문에 unsigned 지정
  int n, print_on=0;
 
  printf("십진수 양수 입력: ");
  scanf(" %d", &n);
 
  bit <<= (sizeof(int)*8-1); // 최상위 비트 1 설정
 
  if(n==0)  // 0일 때는 0만 출력하고 종료
    printf("0");
  else {
    while(bit>0) {
       if(bit&n && print_on==0)  //첫번째 1을 만나면
          print_on=1;              // 출력 가능으로 지정
       if(print_on)
          printf("%d", (bit&n)?1:0);
       bit >>= 1;          // 다음 비트 검사...
     }
  } 
  return 0;
}

--------------------------------------------------------

 

// 다른 방식 : 앞 0 출력을 제한하는 간단한 방법

 

#include <stdio.h>  
     
int main(void) {
  int i, n;
  unsigned int b=1<<(sizeof(int)*8-1); 

 

  printf("10진수 정수 입력: ");
  scanf(" %i", &n);
  if(n==0) {  printf("0");    return 0; }  // 0이면 0만 출력
  

  for(i=0; i<sizeof(int)*8; i++) {
    if(n&b)        // 0이 아니면 '1' 출력
      printf("1");  
    else if(n>b)   // 앞쪽 0을 제외하고 출력 
      printf("0");
    b >>= 1;
 }

 return 0;
}

 

<이상>

반응형

+ Recent posts