Pythonを学んでいると、ある日ふと2進数に変換したい場面が出てきます。 たとえば、10を1010のように表示したい、文字列の2進数を数値に戻したい、0bって何なのか知りたい、という疑問です。
結論から言うと、整数を2進数の文字列に変換するならbin関数が一番簡単です。 ただし、表示形式を整えたい場合はformat関数やf-stringを使うほうが便利です。
この記事では、2進数への変換方法、2進数から10進数へ戻す方法、0bの意味、桁数をそろえる方法まで順番に解説します。 手元で動かしながら読んでみてください。
そもそも2進数とは?¶
Pythonの書き方に入る前に、2進数の意味を軽く確認しておきましょう。 ここを飛ばしてもコードは書けますが、理解しておくとエラーが出たときに慌てにくくなります。
2進数とは、0と1だけで数を表す方法です。 普段私たちが使っている10進数は0から9までの10個の数字を使いますが、2進数は0と1の2個だけを使います。
たとえば、10進数の10は2進数では1010です。 これは、8と2を足すと10になるからです。
最初は少し不思議に感じるかもしれません。 でもコンピューターの世界では、電気が流れているか、流れていないかのような2つの状態で情報を扱うため、2進数はとても相性が良い表現です。
Pythonを使う場合、2進数の考え方を完璧に暗記する必要はありません。 大切なのは、Pythonでは2進数を扱うための関数が用意されていると知ることです。
Pythonで10進数を2進数に変換する基本¶
まずは一番よく使う方法から見ていきます。 整数を2進数に変換したいときは、bin関数を使います。
num = 10
binary = bin(num)
print(binary)
実行結果は次のようになります。
0b1010
ここで、あれ?1010だけじゃなくて0bが付いていると思った人もいるかもしれません。 この0bは、この数値が2進数で書かれていることを表す目印です。
つまり、0b1010は2進数の1010という意味です。 Pythonでは、2進数リテラルを書くときにもこの0bを使います。
num = 0b1010
print(num)
このコードを実行すると、結果は10になります。 Pythonは0b1010を2進数として読み取り、10進数の10として扱ってくれるのです。
bin関数の戻り値は文字列である¶
初心者がよくハマるポイントがあります。 bin関数で返ってくる値は数値ではなく、文字列です。
実際にtype関数で確認してみましょう。
num = 10
binary = bin(num)
print(binary)
print(type(binary))
実行結果は次のようになります。
0b1010
<class 'str'>
strと表示されているので、bin関数の結果は文字列です。 そのため、bin関数で変換した結果にそのまま足し算しようとすると、意図しない動きになります。
binary = bin(10)
print(binary + "1")
この結果は、数値として1を足すのではなく、文字列として末尾に1をくっつけます。
0b10101
このように、2進数に変換したあとに計算を続けたいのか、それとも表示したいだけなのかで考え方が変わります。 表示用なら文字列でOK、計算用なら整数のまま扱うと覚えておくと安全です。
0bを消して2進数だけ表示する方法¶
記事や画面表示では、0b1010ではなく1010だけを表示したいこともあります。 その場合は、いくつか方法があります。
一番シンプルなのは、bin関数の結果から先頭2文字を取り除く方法です。
num = 10
binary = bin(num)
print(binary)
実行結果は次の通りです。
1010
これは、文字列の3文字目から最後までを取り出す書き方です。 Pythonでは文字の位置を0から数えるので、0b1010の0が0番目、bが1番目、1が2番目です。
ただし、実務や読みやすさを考えると、format関数やf-stringを使う方法もおすすめです。 次で詳しく見ていきます。
format関数で2進数に変換する方法¶
format関数を使うと、0bを付けずに2進数へ変換できます。 表示を整えたいときにはbin関数より使いやすいです。
num = 10
binary = format(num, "b")
print(binary)
実行結果は次のようになります。
1010
format(num, "b")のbはbinaryのbです。 つまり、2進数形式で表示してね、という指定です。
個人的には、初心者のうちはbin関数で2進数の基本を理解し、慣れてきたらformat関数を使う流れがよいと思っています。 エンジニア歴10年の中でも、画面表示やログ出力ではformat系の書き方を使う場面が多いです。
f-stringで2進数に変換する方法¶
Pythonではf-stringを使って2進数に変換することもできます。 変数を文字列の中に埋め込みながら表示できるので、説明文と一緒に出力したいときに便利です。
num = 10
print(f"{num:b}")
実行結果は次の通りです。
1010
次のように、説明文と一緒に表示することもできます。
num = 10
print(f"10進数の{num}は、2進数で{num:b}です")
実行結果です。
10進数の10は、2進数で1010です
f-stringはPythonのコードを読みやすくするうえで、とてもよく使います。 すでにf-stringの記事を読んでいる人は、ここで2進数の表示にも使えるんだとつながるはずです。
【関連記事】Pythonのf-stringとは?デバッグが驚くほど楽になる!
2進数変換の方法を比較してみよう¶
ここまで、bin関数、format関数、f-stringの3つを紹介しました。 どれを使えばいいのか迷う人のために、違いを表で整理します。
| 方法 | コード例 | 結果 | 向いている場面 |
|---|---|---|---|
| bin関数 | bin(10) | 0b1010 | 2進数であることを明示したいとき |
| スライス | bin(10) | 1010 | bin関数から0bを消したいとき |
| format関数 | format(10, "b") | 1010 | 表示形式を整えたいとき |
| f-string | f"{10:b}" | 1010 | 文章の中に埋め込んで表示したいとき |
初心者におすすめなのは、まずbin関数を覚えることです。 そのあと、0bが不要ならformat関数やf-stringを使うとよいです。
最初から全部覚えようとしなくて大丈夫です。 まずはbin関数で変換できることを理解し、必要になったタイミングで表示方法を増やしていけば十分です。
2進数から10進数に戻す方法¶
python 2進数に変換と検索する人の中には、逆に2進数から10進数へ戻したい人もいるはずです。 ここでは、int関数を使います。
binary = "1010"
num = int(binary, 2)
print(num)
実行結果は次の通りです。
10
int(binary, 2)の2は、2進数として読み取ってくださいという意味です。 普通のint関数は文字列を整数に変換しますが、第2引数を指定すると何進数として読むかを指定できます。
0bが付いた文字列でも変換できます。
binary = "0b1010"
num = int(binary, 2)
print(num)
実行結果は同じく10です。
10
この書き方を知っていると、2進数の文字列を受け取って計算に使いたいときに便利です。 10進数、2進数、16進数の変換はセットで理解するとかなり楽になります。
【関連記事】Pythonで16進数と10進数を変換する方法を初心者向けに解説!int関数・hex関数・実務での使いどころまで
桁数をそろえて2進数に変換する方法¶
2進数を扱っていると、桁数をそろえたい場面があります。 たとえば、5を101ではなく00000101のように8桁で表示したい場合です。
このときは、format関数やf-stringの書式指定を使います。
num = 5
binary = format(num, "08b")
print(binary)
実行結果は次の通りです。
00000101
08bの意味は、8桁になるように0で埋めて、2進数で表示するという指定です。 同じことはf-stringでも書けます。
num = 5
print(f"{num:08b}")
実行結果は同じです。
00000101
これは地味ですが、かなり実用的です。 ビットの状態を見たいときや、フラグ管理の説明をしたいとき、桁数がそろっているだけで読みやすさが大きく変わります。
エンジニアとしてコードレビューをしていると、値は合っているのに表示がバラバラで確認しづらいコードを見ることがあります。 そういうとき、桁数をそろえるだけでデバッグのしやすさがかなり変わります。
負の数を2進数に変換するとどうなる?¶
負の数をbin関数で変換すると、次のようになります。
print(bin(-5))
実行結果です。
-0b101
Pythonのbin関数は、負の数をそのままマイナス付きの2進数表現にします。 コンピューター内部の補数表現をそのまま表示するわけではありません。
ここは初心者が混乱しやすいポイントです。 まずは、bin(-5)は-0b101になる、と覚えておけば大丈夫です。
2進数に変換してビット演算を試してみる¶
2進数の変換を学ぶと、ビット演算の入り口にも立てます。 ビット演算とは、数値を2進数のビット単位で操作する計算です。
たとえば、AND演算を見てみましょう。
a = 0b1100
b = 0b1010
result = a & b
print(format(result, "04b"))
実行結果です。
1000
&はAND演算子です。 両方のビットが1の場所だけが1になります。
もう少し見やすく表示してみます。
a = 0b1100
b = 0b1010
print(f"a : {a:04b}")
print(f"b : {b:04b}")
print(f"a & b : {a & b:04b}")
print(f"a | b : {a | b:04b}")
print(f"a ^ b : {a ^ b:04b}")
実行結果です。
a : 1100
b : 1010
a & b : 1000
a | b : 1110
a ^ b : 0110
| 演算子 | 名前 | 意味 |
|---|---|---|
| & | AND | 両方が1なら1 |
| | | OR | どちらかが1なら1 |
| ^ | XOR | 片方だけが1なら1 |
ビット演算は、権限管理、フラグ管理、低レイヤの処理、画像処理などで出てくることがあります。
私も実務では毎日ビット演算を書くわけではありません。 でも、ライブラリの内部実装やエラーコード、権限の仕組みを読むときに、知っているだけで理解のスピードが変わる場面があります。
よくあるエラーとつまずきポイント¶
ここまで読めば、基本的な2進数変換はかなりできるようになっています。 ただ、初心者がつまずきやすいポイントもあるので、先に見ておきましょう。
2進数の文字列をそのまま計算しようとしてしまう¶
bin関数の結果は文字列です。 そのため、次のようなコードは数値計算としては使えません。
binary = bin(10)
print(binary + 1)
このコードはエラーになります。 文字列と整数を足そうとしているからです。
計算したい場合は、整数のまま扱うか、int関数で変換し直しましょう。
binary = "1010"
num = int(binary, 2)
print(num + 1)
実行結果です。
11
0bを付け忘れて2進数リテラルとして書けない¶
Pythonで2進数の値を直接書きたいときは、先頭に0bを付けます。 1010と書くと、Pythonは10進数の千十として扱います。
print(1010)
print(0b1010)
実行結果です。
1010
10
この違いはとても大切です。 2進数として書きたいなら0bを付ける、と覚えておきましょう。
int関数の第2引数を忘れてしまう¶
文字列の1010を2進数として10に変換したい場合、int("1010")だけではうまくいきません。 これは10進数の1010として読み取られるからです。
print(int("1010"))
print(int("1010", 2))
実行結果です。
1010
10
第2引数の2を付けるだけで意味が大きく変わります。 この違いは、Python初心者のうちに押さえておきたいポイントです。
実務目線で見る2進数変換の使いどころ¶
ここまで読んで、ところで2進数変換って実務で使うの?と思った人もいるかもしれません。 正直に言うと、Webアプリ開発や業務自動化だけをしていると、毎日使うものではありません。
ただし、知っていると理解が深くなる場面はあります。 たとえば、権限をビットで管理しているコード、ファイル形式の解析、ネットワークや画像処理、組み込み系に近い処理では、2進数やビット演算の知識が役立ちます。
エンジニア歴10年の経験から言うと、2進数変換そのものよりも、2進数で見ると仕組みが理解しやすくなる場面が多いです。 普段は10進数で見ていた値も、2進数にするとどのフラグが立っているのかが見えることがあります。
たとえば、権限を読み取り、書き込み、実行のようにビットで管理する場合、2進数表示にすると状態を確認しやすくなります。 デバッグ中にformat(value, "08b")のように表示すると、原因が一瞬で見つかることもあります。
初心者のうちは、難しい理論よりも手を動かして表示してみるのが一番です。 10、15、255などを2進数にして、見え方を比べてみるだけでも感覚がつかめます。
練習問題として小さな変換ツールを作ってみよう¶
最後に、入力した10進数を2進数に変換する簡単なツールを作ってみましょう。 input関数、int関数、f-stringの練習にもなります。
text = input("10進数の整数を入力してください: ")
num = int(text)
print(f"2進数: {num:b}")
print(f"8桁表示: {num:08b}")
print(f"0b付き: {bin(num)}")
たとえば、5と入力すると次のように表示されます。
10進数の整数を入力してください: 5
2進数: 101
8桁表示: 00000101
0b付き: 0b101
このような小さなプログラムでも、入力、変換、表示という大切な流れを練習できます。
input関数に慣れていない人は、先にキーボード入力の基本を確認しておくと理解しやすいです。
【関連記事】Pythonのinput関数を初心者向けに解説!キーボード入力を受け取る基本
まとめ:Pythonで2進数に変換するならまずbin関数から覚えよう¶
Pythonで2進数に変換する方法は、目的によって使い分けます。 基本を学ぶならbin関数、0bなしで表示したいならformat関数、文章の中に埋め込みたいならf-stringが便利です。
特に初心者のうちは、最初から全部を完璧に覚える必要はありません。 まずはbin(10)が0b1010になること、format(10, "b")が1010になること、int("1010", 2)で10進数に戻せることを押さえれば十分です。
最後に、今回の要点を表で整理します。
| やりたいこと | 書き方 | 結果 |
|---|---|---|
| 10進数を2進数にする | bin(10) | 0b1010 |
| 0bなしで2進数にする | format(10, "b") | 1010 |
| f-stringで2進数表示 | f"{10:b}" | 1010 |
| 8桁で0埋めする | f"{5:08b}" | 00000101 |
| 2進数文字列を10進数へ戻す | int("1010", 2) | 10 |
2進数は、最初は少しとっつきにくく感じるかもしれません。 でも、Pythonには変換用の関数がそろっています。
まずは10や255のような身近な数字を2進数に変換するところから始めてみましょう。
ここまでお読みいただきありがとうございました。