【Python】10進数 2進数 変換を初心者向けに解説

はじめに

Pythonで 10進数と2進数を相互に変換 する方法は、さまざまな場面で役立ちます。
プログラミング初心者の皆さんは、2進数と聞くと難しそうに感じるかもしれませんが、実はPythonには便利な関数が複数用意されています。
短いコードで変換ができるため、特別なライブラリをインストールしなくても手軽に試せるのが特徴です。

本記事では、Pythonを使った 10進数 → 2進数、および 2進数 → 10進数 の変換方法をわかりやすくご紹介します。
また、初歩的な変換コードのサンプルや実務での活用シーン、トラブルシューティングなどもあわせて解説していきます。

この記事を読むとわかること

  • 10進数と2進数の基本的な違い
  • Pythonで10進数を2進数に変換する方法
  • Pythonで2進数を10進数に変換する方法
  • 実務でどのように活用されるか
  • 変換時の注意点とトラブルシューティング

10進数と2進数の基本

10進数は、私たちが日常生活で使っている数の表現方法です。
例えば、0から9までの10種類の数字を使って表現するので「10進数」と呼ばれています。

一方で、2進数はコンピュータが情報を処理するときに使う数の表現方法です。
0と1の2種類の数字しか使わないため「2進数」と呼ばれます。

多くのプログラミングや計算機システムは内部で2進数を利用して処理を行っていますが、実際に私たちが直接入力する数は10進数であることがほとんどです。
そのため、開発者は10進数と2進数を行き来する必要に迫られることがあります。

例えば次のようなシーンです。

ネットワーク関連の制御

IPアドレスやマスク値のビット単位での操作

マイコンなど低レベルプログラミング

各種レジスタのフラグをビットごとに操作

暗号やビット演算を多用するアルゴリズム

2進数で状態を管理しながら演算を行う

Pythonでは簡単なコードで10進数と2進数の変換ができるので、これらの場面でも効率よく作業を進められるでしょう。

Pythonで10進数を2進数に変換する方法

ここでは、Pythonで 10進数 → 2進数 に変換する基本的な方法をいくつか紹介します。
いずれもシンプルな記述で扱いやすいので、初心者の皆さんにも取り組みやすいでしょう。

bin()関数を使う

Pythonには、数値を2進数の文字列に変換するための組み込み関数 bin() があります。
たとえば、10進数の 10 を2進数に変換する場合は次のように書きます。

num = 10
binary_str = bin(num)
print(binary_str)  # 結果: 0b101

bin() は変換後の文字列の先頭に 0b を付加します。
この 0b は、後に続く文字列が2進数であることを示すためのプレフィックスです。

もし 0b を取り除いて純粋に「101」という文字列だけが欲しいときは、スライスを使う方法などがあります。

num = 10
binary_str = bin(num)[2:]  # 先頭2文字("0b")を除外
print(binary_str)          # 結果: 101

format()で変換する

format() 関数を使って任意の書式を指定できるのもPythonの特徴です。
2進数形式に変換したい場合、次のように書きます。

num = 10
binary_str = format(num, 'b')
print(binary_str)  # 結果: 101

'b' という書式指定子を使うと、2進数の文字列が返ってきます。
この方法では 0b のプレフィックスが付かないため、純粋な2進数表記が必要な場面に向いています。

f文字列を利用する

Python 3.6以降では、f文字列 と呼ばれる機能を使って埋め込みの形で書式を指定できます。
例えば次のようなコードで2進数に変換できます。

num = 10
binary_str = f"{num:b}"
print(binary_str)  # 結果: 101

コードが短くスッキリと書けるため、処理の流れをコンパクトに書きたいときなどに便利です。
ただし、あくまでも可読性とメンテナンス性のバランスを考慮して選びましょう。

Pythonで2進数を10進数に変換する方法

続いて、 2進数 → 10進数 の変換です。
Pythonで2進数を表す場合、文字列として保持することが多いでしょう。

int()関数を使う

最もシンプルなのが、組み込み関数の int() を使う方法です。
int() は第1引数に文字列、第2引数に基数(base)を指定することで、文字列を数値型に変換できます。

binary_str = "101"
decimal_num = int(binary_str, 2)
print(decimal_num)  # 結果: 5

この例では "101" という2進数を10進数に変換して 5 という整数を得ています。
実際の開発では、外部から受け取った2進数表記のデータや、ビット演算結果を数値として再利用したいときに有用です。

変換後の利用シーン

たとえば、センサーやIoT機器からビット列でデータを受け取るケースでは、ビット単位のデータをいったん2進数文字列として処理した後に10進数として扱うことがあります。
そのままの2進数では演算がしにくい場合が多いため、一旦10進数に変換して計算し、最終的に結果を再び2進数へ戻すという流れがよく行われています。

このように2進数と10進数の行き来をスムーズに行うことで、マイコン制御や複雑なネットワーク設定など、さまざまな現場で役立つでしょう。

実務での活用例

ここからは、実際の業務でどのように10進数と2進数の変換が応用されるかを少し触れておきます。

例えば、ネットワークエンジニアの現場ではIPアドレスのサブネットマスク計算をビット単位で扱うことが多いです。
10.0.0.1 のようなIPアドレスが内部的にどのような2進数になっているかを理解し、各ビットを正しく計算できると、複雑なサブネット設計も理解しやすくなります。

また、組み込み系のソフトウェア開発では、レジスタやI/Oポートなどをビット単位で制御することが欠かせません。
2進数を10進数に変換して数値比較を行う、あるいは10進数を2進数に変換してピンのON/OFFを指定するといった処理が頻繁に登場します。

さらに、暗号や圧縮などのアルゴリズムに携わる現場でも、ビット演算は重要なテクニックです。
必要に応じて2進数と10進数を行き来できれば、データを正しく扱えるようになります。

トラブルシューティングと注意点

10進数と2進数を変換するとき、いくつか注意しておくべきポイントがあります。

1. 大きな数値を扱う場合

Pythonでは比較的大きな数を扱えますが、それでも極端に大きい数を変換する際は時間やメモリに負荷がかかることがあります。
あまりに大きい整数を取り扱うと、計算に時間がかかったりメモリ使用量が増えたりする可能性があります。

2. 先頭に付く「0b」の扱い

bin() を使うと変換結果に 0b が付くため、文字列をさらに加工するときや別のシステムに渡すときには注意しましょう。
システムによっては 0b101 の形式を正しく解釈できない場合もあります。

3. 文字列の不正入力

2進数を表す文字列に、29 といった2進数として無効な文字が混ざっていると int() 関数などでエラーが発生します。
外部から入力を受け取る際には、正規表現などでバリデーションを行うと良いでしょう。

4. ビット数の明確化

特定のビット数を固定して扱いたい場面では、必要に応じてパディング(ゼロ埋め)をすることがあります。
例として format(num, '08b') のように書くと、8ビット固定で2進数を出力できるので、機器間でデータをやり取りするときなどはこの指定が便利です。

もしビット演算やバイナリデータの操作で想定と異なる結果が出た場合は、先頭にある「0b」の有無やビット数の不足・超過を最初に確認しましょう。

まとめ

Pythonを使った 10進数と2進数の相互変換 は、初心者でも取り組みやすいトピックです。
bin()int() といった組み込み関数、あるいは format() や f文字列を使って、簡単に変換できます。

また、実務ではネットワークのサブネットマスク計算やレジスタの制御など、2進数と10進数を行き来するシーンが多々存在します。
これらの仕組みを理解しておくことで、より柔軟にプログラムを組み立てることができるでしょう。

まずは手元で小さなサンプルを動かして、どのように数値が変換されるかを試してみるのがおすすめです。
さらに慣れてきたら、現場での具体的な課題に適用してみてください。

Python 10進数 2進数 変換についての基本的な方法と考え方を身につけることで、プログラミングの幅が広がっていくのではないでしょうか。
ぜひ、今回紹介した内容を活用してみてください。

Pythonをマスターしよう

この記事で学んだPythonの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。