今年の最後はプログラムです。
【問題】 入力した10進数を2進数に変換して表示するプログラムを作成せよ。
C言語の授業の期末テストで出した問題です
解答例を2つ考えました。
1つ目は情報処理の勉強で習ったとおり元の数を2で割ってあまりを求めていき、最後に1になるまで繰り返すものです。
/* 10進数を2進数に変換する(1) */ #include <stdio.h> #include <stdlib.h> int main(void) { int i, n; int bits[1024]; int digit, amari; printf("10進数: "); scanf("%d", &digit); n=0; while(digit>=1){ amari = digit % 2; /* 配列変数に順番に代入して */ bits[n++] = amari; digit = digit / 2; } /* 逆順に表示している */ for(i=n-1; i>=0; i--){ printf("%d", bits[i]); } printf("\n"); return 0; }
2つ目はコンピュータの得意なビット演算を用いた方法です。
int型変数のサイズを4バイトとして考えています。
/* 10進数を2進数に変換する(2) */ #include <stdio.h> #include <stdlib.h> int main(void) { int i; unsigned int digit; /* 1000 0000 0000 0000 0000 0000 0000 0000 */ unsigned int bitCheck = 0x80000000; printf("10進数: "); scanf("%d", &digit); /* int型が4バイトであるため */ for(i=0; i<32; i++){ switch(digit & bitCheck){ case 0: printf("0"); break; default: printf("1"); } /* 1ビット右にシフトする */ bitCheck >>= 1; } printf("\n"); return 0; }
他にも色々と答えはあると思います。
Larry Wallの言葉を借りれば、
There is more than one way to do it!(そのやり方は色々ある!)
です。
今年もありがとうございました。
来年また、よろしくお願いいたします。
〓武田〓