プログラミング初心者、学生
「10進数を2進数、16進数に変換する課題が出た。
bitって何?どうやればいいの?」
そんな方の疑問に答えるために、図を用いて分かりやすく説明しました。
コードが知りたい方は目次のソースコードへ飛んでください!
本記事のテーマ
【完全初心者向け】10進数から2進数、8進数、16進数変換
図を使ってわかりやすく伝えます。
一般解
16進数
16進数はprintf関数内の’%x’で変換できます!
printf("16進数: 0x%x\n", input);
2進数、8進数
続いて2進数の変換です。
char input;
int i, tmp;
printf("文字を入力してください!\n");
scanf("%c", &input);
printf(" 2進数: ");
tmp = input; //int型にchar型を代入->int型に変換!
//i=128->64->32->16->8->4->2->1のループ
for(i=128; i>0; i = i >> 1){
printf("%d", tmp/i);
tmp %= i;
}printf("\n");
tmp=inputの説明
char型=文字型の入力inputとint型=数の変数tmpを宣言します。
tmp=input
でint型にchar型を代入することでtmpにint型のinput(入力した文字)が入ります。
forループの説明
//i=128->64->32->16->8->4->2->1のループ
for(i=128; i>0; i = i >> 1){ //i>>1はシフト演算(iを1/2する)
printf("%d", tmp/i);
tmp %= i;
}printf("\n");
128->64->32->16->8->4->2->1のループで8ビットの2進数変換を行う。
入力(10進数)に対して、各ビットの10進数で割る。
割ることが出来たら、そのbitが1になる。これを各ビットで繰り返して2進数に変換する。
※シフト演算子は割り算より早い、2で割れる場合は出来るだけシフト演算を用いよう!
続いて8進数だが、8進数は256を3bitで表現できるので、2進数の 128->64->32->16->8->4->2->1のループを64->8->1に変えるだけで良い。
コード的には、for(i=128; i>0; i = i >> 3)
ソースコード
#include
void enshu0529(){
char input;
int i, tmp;
printf("文字を入力してください!\n");
scanf("%c", &input);
printf("10進数: %d\n", input);
printf("16進数: 0x%x\n", input);
printf(" 8進数: ");
tmp = input;
for(i=128; i>0; i = i >> 3){
printf("%d", tmp/i);
tmp %= i;
} printf("\n");
printf(" 2進数: ");
tmp = input;
for(i=128; i>0; i = i >> 1){
printf("%d", tmp/i);
tmp %= i;
}
printf("\n");
}
int main() {
enshu0529();
return 0;
}