機械学習やデータ分析分野で定番のプログラミング言語、話題のPythonを使って数学を学び直しましょう。今回は「基数変換」を解説します。

 10進数から2進数へ、2進数から10進数へ──。表記されている数を別の位取り記数法で表すことを、基数変換と言います。

10進数から2進数へ

 10進数の「2365」は、

  1000の位が2
  100の位が3
  10の位が6
  1の位が5

ですね。それぞれの桁はどうして「2」「3」「6」「5」になるのでしょうか?計算して求めてください。どういう計算をすればいいと思いますか?「2365だもの、見ればわかるじゃん!」ではダメですよ。次の図を見て、考えてみてください。

10進数の各桁の値
[画像のクリックで拡大表示]

 答えは「元の値を基数で繰り返し割ったときの余り」です。10進法であれば、10で割り算してください。このときの余りが1の位の値です。次は、商を10で割り算してください。2回目の割り算の余りは10の位の値になります。さらにその商を10で割って……。

 これを商が0になるまで繰り返すと、各桁の値が取り出せます。最後まで計算したら、求めた余りを右から順番に並べましょう。すると……、元の値に戻りましたね!

 10進数を2進数に変換するときは、変換先の基数である「2」で割り算してください。割り算の商が0になるまで計算したあと、求めた余りを右から順に並べると、元の10進数を2進数で表せるというわけです。

10進数から2進数へ
[画像のクリックで拡大表示]
【Try Python】10進数から2進数に変換するプログラム

 前述の処理を、コンピュータにやってもらいましょう。リスト1のdec2bin()関数は、10進数の値を2進数に変換するプログラムです。Pythonのbin()関数も、内部ではこんな処理をしているのです。

 dec2bin()関数を実行するとき、引数targetには10進数の値を与えてください。例えば、「26」を2進数に変換するときは、次のように実行します。bin()関数と表示の仕方は異なりますが、数字の並びは同じですね。

[画像のクリックで拡大表示]
リスト1 10進数から2進数に変換する「dec2bin」
[画像のクリックで拡大表示]

 なお、上の実行結果はリスト1をPythonインタプリタ(コマンド実行ツール)に入力したうえで実行したものです。3行目、8行目の空き行は省略して入力します。以降のリストも同様です。

 プログラムの内容を簡単に見ていきましょう。amariは、割り算の余りを入れるために用意した空のリストです。①のwhileループではtargetの値が0になるまで、

[画像のクリックで拡大表示]

を実行しています。

 whileループを終了したあとの②は、amariの要素を逆順に並べ替える命令です。これで余りを右から順に並べるのと同じことができます。

リストの要素を逆順にする
[画像のクリックで拡大表示]