/*  10進数(正整数)−>2進数変換 */
#include <stdio.h>
#define N    2
#define MAXD 16      /* 最大桁数  */
#define MAXV 65535   /* 最大値    */
#define DEBUG

int main(void)
{
  int x ;
  char bin[MAXV] ;
  int i,j,xx ;

  printf("10進数(正整数):") ;
  scanf("%d",&x) ;
  if((x<=0)||(x>MAXV)) {
    printf("入力データが誤りです。\n") ;
    return(1) ;
  }

  xx=x ;
  i=MAXD-1 ;
#ifdef DEBUG
  printf("1回目:%d\n",xx) ;
#endif  
  while(i>=0) {
    if((xx%N)!=0) {
      bin[i]='1' ;
    }
    else {
      bin[i]='0' ;
    }
    xx=xx/N ;
    if(xx==0) break ;
    i-- ;
#ifdef DEBUG
    printf("%d回目:%d\n",(MAXD-i),xx) ;
#endif  
  }

  printf("2進数:") ;
  for(j=i;j<MAXD;j++) putchar(bin[j]) ;
  printf("\n") ;
  return(0) ;
}


% gcc -Wall sample.c
% ./a.out
10進数(正整数):12345678
入力データが誤りです。

% ./a.out
10進数(正整数):95
1回目:95
2回目:47
3回目:23
4回目:11
5回目:5
6回目:2
7回目:1
2進数:1011111

% ./a.out
10進数(正整数):65535
1回目:65535
2回目:32767
3回目:16383
4回目:8191
5回目:4095
6回目:2047
7回目:1023
8回目:511
9回目:255
10回目:127
11回目:63
12回目:31
13回目:15
14回目:7
15回目:3
16回目:1
2進数:1111111111111111

  1. 最初の実行例は,入力データが2進数で16ビットにおさまらない場合で,エラーメッセージが表示され,計算は行わない.
  2. 2番目の例は,10進数95を入力しており,2進数1011111が求まる.途中の計算結果も出力してあり,合計7回の繰り返し処理を実行している.
  3. 3番目の例は,10進数65535を入力しており,2進数では16ビットすべてが1になる.繰り返し処理は都合16回実行する.