【Python】2進数を扱う方法を初心者向けに詳しく解説

はじめに

Pythonのプログラミングでは、数字をさまざまな形式で扱います。
その中でも、2進数はコンピューターの内部処理に直結しているため、避けては通れないトピックです。

たとえばデータのビット単位での操作、ハードウェア制御、暗号処理など、2進数を意識しておくと理解がぐっと深まります。
初めは少し難しい印象があるかもしれませんが、Pythonには便利な関数が用意されているので、それらを使えば手軽に2進数を扱うことができます。

この記事では、Python 2進数の基本から実用例までを、初心者の方でも理解しやすいように紹介します。
コード例も交えながら、実務でどのように役立つかをイメージしやすい内容をまとめていますので、ぜひ参考にしてみてください。

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

  • Pythonで2進数を扱うための基本的な方法
  • bin()関数やビット演算子などの具体的な使い方
  • 実際の業務や開発でどんなシーンに応用できるか

Python 2進数の基本

コンピューター内部では、データはすべて0と1の並び(2進数)で表現されています。
Pythonなどの高級言語を使っていると、意識する機会が少ないかもしれません。
しかし、2進数を正しく理解しておくと、数値変換やビット単位の演算に関するエラーが減り、プログラムの動きも把握しやすくなります。

ここではまず、2進数そのものの概要を説明したうえで、Pythonで使う方法を確認しましょう。

2進数とは何か

私たちが普段使っている数字は10進数です。
たとえば「10」という数字は、10進数では「10」という表記ですが、2進数では「1010」という表記になります。

2進数は0と1だけで構成されており、次のように位取りで表されます。

桁(2進数)8421
1010

上記の例では「1010」と書かれ、10進数で10を意味します。
Pythonでは2進数を直接書くとき、先頭に0bを付けて表すことが多いです。
たとえば0b1010というような記述で、2進数の10を示すというイメージです。

Pythonで2進数を扱うための方法

Pythonで2進数を扱うためには、主に次の方法が挙げられます。

  • bin()関数を使って2進数を文字列として取得する
  • format()関数やf文字列で、任意の書式に変換する
  • 2進数リテラル(0b)を使って直接数値を表現する
  • ビット演算子を使って値を操作する

まずは一番基本となる変換方法を見てみましょう。

2進数に変換する基本的な関数

Pythonでは、10進数を2進数の文字列に変換するための機能が備わっています。
ここでは代表的な2つの方法を紹介します。

bin()関数とは

bin()関数を使うと、引数に与えた整数を2進数の文字列(先頭に0bが付く形式)に変換できます。

number = 10
binary_str = bin(number)
print(binary_str)  # 出力結果: 0b1010

ここで返ってくる文字列は、先頭に0bが付いた形です。
0bを外した形で扱いたい場合は、スライスで文字列を加工することもできます。

number = 10
binary_str_no_prefix = bin(number)[2:]  # "1010"

bin()関数は処理がシンプルで覚えやすいのがポイントですが、出力される文字列には0bが含まれることを知っておきましょう。

format()関数とf文字列

次に紹介するのが、format()関数やf文字列の書式指定機能です。
こちらを使うと、先頭の0bなしで2進数を取得するなど、より柔軟な書式管理ができます。

number = 10
binary_str = format(number, 'b')
print(binary_str)  # 出力結果: 1010

また、f文字列でも同じ指定が可能です。

number = 10
binary_str = f"{number:b}"
print(binary_str)  # 出力結果: 1010

format(number, 'b')f"{number:b}"を使うと、0bなしの文字列が得られます。
ゼロ埋めしたい場合は、以下のように桁数を指定する方法もあります。

number = 5
binary_str_4digits = f"{number:04b}"
print(binary_str_4digits)  # 出力結果: 0101

このように、bin()format() では目的によって使い分けることが可能です。

2進数を整数に戻す方法

反対に、2進数の文字列を整数に変換したいケースもあります。
Pythonのint()関数には進数を指定するオプションがあり、2進数の文字列を簡単に10進数の整数に戻すことができます。

binary_str = "1010"
decimal_number = int(binary_str, 2)
print(decimal_number)  # 出力結果: 10

引数として文字列と基数(この場合は2)を指定するだけです。
これにより、ファイルに保存されている2進数の文字列やネットワーク通信で受け取ったデータなどをPythonの整数として扱えるようになります。

ビット演算の基礎

2進数を扱う上では、ビット演算を知っておくと便利です。
ビット演算子を使うと、数値を2進数としてみたときのビット同士でANDやORなどの演算が行えます。
ここではよく使われる代表的な演算子を簡単に紹介します。

AND演算(&

AND演算は、対応するビットが両方とも1の場合にだけ1が立つ演算です。

a = 0b1010  # 10進数で10
b = 0b1100  # 10進数で12
result = a & b
print(bin(result))  # 出力結果: 0b1000 (10進数で8)

OR演算(|

OR演算は、対応するビットのどちらかが1であれば1が立ちます。

a = 0b1010
b = 0b1100
result = a | b
print(bin(result))  # 出力結果: 0b1110 (10進数で14)

XOR演算(^

XOR演算は、対応するビットが異なる場合に1が立ちます。

a = 0b1010
b = 0b1100
result = a ^ b
print(bin(result))  # 出力結果: 0b0110 (10進数で6)

シフト演算(<<>>

シフト演算はビットを左や右に移動させる演算です。
左シフトはビットを指定された数だけ左に移動し、右シフトは右に移動します。

a = 0b1010  # 10進数で10

# 左に1ビットシフト
left_shift = a << 1
print(bin(left_shift))  # 出力結果: 0b10100 (10進数で20)

# 右に1ビットシフト
right_shift = a >> 1
print(bin(right_shift))  # 出力結果: 0b101 (10進数で5)

ビット演算は内部動作を意識する必要があるため、慣れないうちは混乱しがちです。
しかし、仕組みを知っておくとPython 2進数を扱う際に強力な手段となります。

2進数を活用する実務シーン

ここからは、2進数が実務でどのように役立つかを、もう少し具体的にイメージしてみます。
初心者のうちは「どこで使うのか分からない」と感じるかもしれませんが、実際にはいろいろな場面で登場します。

フラグ管理

プログラムで複数の状態を同時に保持する必要がある場合、ビットフラグによる管理が便利です。
たとえばユーザーの権限設定で、読み取りや書き込み、実行可否など、複数の権限状態を1つの整数でまとめて管理できます。
各ビットに1または0を設定し、それをビット演算子で判定していくことで状態のチェックが簡単に行えます。

フラグ管理を行うと、権限のチェックや状態の切り替えを柔軟に処理できます。
たとえば 0b1011 のようにしてビットごとに異なる権限を割り当てるイメージです。

バイナリデータの操作

ファイルフォーマットや通信プロトコルでは、データが2進数レベルで細かく定義される場合があります。
その場合、Pythonでは2進数リテラルやビット演算を使って、個々のビットを抽出・変更して処理します。
これによって、画像ファイルや音声ファイルなどの特定部分を編集するなど、より細かな制御が可能になります。

ネットワークとデバイス制御

ネットワークのパケットヘッダーや、組み込みデバイスが出力するセンサーデータなども、ビット列で表されることが多いです。
こうしたデータを2進数で表現しておくことで、送受信する情報を正しく解釈しやすくなります。

Python 2進数を扱う上での注意点

2進数を取り扱うときには、いくつか気を付けるべきポイントがあります。
慣れないうちは意外なところで間違いやすいので、注意点を確認しておきましょう。

先頭の0bの扱い

bin()関数で得られた文字列には先頭に0bが付いています。
このままの形式で保存したり、他システムへ送信したりすると想定外の結果になる可能性があります。
変換処理が必要な場合は、format()や文字列スライスなどで調整しましょう。

符号付き整数の扱い

Pythonの整数は符号付きです。
bin()関数を使ったときに負の値を変換すると、結果の文字列にはマイナス記号-がつきます(-0b1010のような形)。
負数を2進数表現に変換するときは、符号を含む動作やビット数の取り扱いを正しく理解することが必要です。

大きい整数の扱い

Pythonの整数は自動的に大きな値まで扱えますが、ビット演算などを行う場合には処理速度に影響が出ることがあります。
また、データをどこかへ送信するときは、受け側が対応できるビット数かを確認しておく必要があるでしょう。

2進数を扱う際は、演算結果が指定したビット数を超えてしまうリスクも考慮が必要です。

まとめ

ここまで、Python 2進数を中心に基本的な変換方法やビット演算、実務における活用シーンなどを紹介してきました。
初心者の方は2進数という言葉自体に少し敷居の高さを感じるかもしれませんが、Pythonには変換関数が用意されているため、比較的スムーズに取り組めるはずです。

まずはbin()format()で2進数への変換を試してみましょう。
そしてビット演算子を使って値を操作し、どのようにビットが変化するかを確認するのもおすすめです。

2進数の概念が理解できるようになると、ハードウェア操作やネットワーク、セキュリティの分野への応用がグッと広がります。
ぜひPythonを使って、2進数の世界に親しんでみてください。

Pythonをマスターしよう

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