/* 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 |