【問題7】10進数を2進数に変換するプログラム完全マスター! 組み込みC言語プログラミング(8)(1/2 ページ)

C言語を使ったマイコン制御プログラムの“イロハ”を解説する本連載。今回はfor文(繰り返し)とif文(分岐)を使い、整数を入力し、その値を2進数で表示するプログラムを作成します。

» 2014年08月07日 11時00分 公開
[横田一弘 埼玉県立新座総合技術高等学校 教諭,ITmedia]
photo

 本連載では、これから組み込みシステムのプログラミングを学びたい人向けに、C言語を使ったマイコン制御プログラムの“イロハ”を解説していきます。

 毎回少しずつステップアップしていけるよう、本文の最後で問題を出し、次回その解答と解説を紹介していきます。では早速、前回の問題を振り返ってみましょう。


問題7 「整数を入力し2進数で表示」

前回の宿題(問題7):

整数を入力し、その値を2進数で表示するプログラムを作成してください。



 問題7は「整数を入力し2進数で表示する」でした。

 それでは解答を発表します。

#include <stdio.h>
 
int main(void)
{
 int n, i, b[32];
 
 printf("数を入力してください->");
 scanf("%d", &n);
 for (i = 0; n > 0; i++) {
  b[i] = n % 2;
  n = n / 2;
 }
 while (i > 0) printf("%1d",  b[--i]);
 putchar('\n');
}
問題7の解答「dec2bin.c」

 dec2bin.cを実行すると、次のような結果になります。

photo

10進数を2進数に変換する

 C言語の「printf」の書式指定には、整数を10進数で表記する%d、16進数で表記する%x(または%X)、8進数で表記する%oがあります。ですから「整数を入力し16進数で表示する」プログラムは、

#include <stdio.h>
 
int main(void)
{
 int n;
 
 printf("数を入力してください->");
 scanf("%d", &n);
 printf("%x\n",  n);
}

 でいいのですが、2進数となると自分で処理を考えなくてはなりません。

 10進数を2進数に変換するには、2で割って余りを求めていく方法が一般的ではないでしょうか(詳細はこちら)。問題では、人間が行うその計算をCプログラムに置き換えればよいのです。

 以下にdec2bin.cのフローチャートを示します。

photo dec2bin.cのフローチャート

 このプログラムには、2つの「繰返し(ループ)」があります。

 最初の「繰返し」では、nを2で割りつつ2進数を求めています。結果は配列bに格納されますが、2進数の1(20)の位はb[0]に、2(21)の位はb[1]に、4(22)の位はb[2]に……のように格納されます。

 C言語ではfor文を使って、次のように書かれます。

for (i = 0; n > 0; i++) {
 b[i] = n % 2;
 n = n / 2;
}

 次の「繰返し」は、求めた2進数を表示するものです。数値は上位の桁を左に(先に)表示しなければなりません。そこでb[i]のiを1ずつ減じていき、2[0]まで表示します。

 C言語ではwhile文を使って、次のように1行で書くことができます。

while (i > 0) printf("%1d",  b[--i]);

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.