今年の最後はプログラムです。
【問題】 入力した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!(そのやり方は色々ある!)
です。
今年もありがとうございました。
来年また、よろしくお願いいたします。
〓武田〓