HOWTO · Python
Python で Int をバイナリに変換する方法
このチュートリアルでは、Python で整数をバイナリに変換する方法を説明します。
このページの内容
Pythonで整数を2進数の文字列に変換する最も手軽な方法は、組み込み関数 bin() を使うことです。0b 接頭辞のない数字だけが必要な場合は、format() または文字列フォーマットを使います。ビット操作の例では、数字を手作業で組み立てる方法を示します。
Pythonで整数を2進数に変換するには bin() を使う
整数を bin() に渡します。戻り値は文字列で、2進数を表す数字の前に基数2を示す 0b 接頭辞が付きます。
value = 16
binary = bin(value)
print(binary)
0b10000
負の整数の場合、bin() は bin(-10) のように、接頭辞の前に - を付けます。戻り値は文字列なので、そのまま表示に使えます。数値が必要な場合に限り、アプリケーションの用途に応じて解析してください。
Pythonで整数を 0b 接頭辞なしの2進数に変換するには format() を使う
整数と b 書式指定子を format() に渡すと、2進数の数字だけを取得できます。この指定子は基数2を選びます。bin() と異なり、結果に 0b は含まれません。ここで使う format() は組み込み関数です。また、bin() もメソッドではなく組み込み関数で、前述のように接頭辞付きの表現を返します。
value = 10
binary_digits = format(value, "b")
print(binary_digits)
1010
負の整数では、書式設定された文字列の先頭にマイナス符号が付き、その後に絶対値の2進数が続きます。先頭にゼロを付けるには、format(10, "08b") のように幅を指定します。この幅には数字と符号の両方が含まれます。幅は最小値なので、必要な桁数が指定幅を超えても切り捨てられません。
Pythonで整数を2進数に変換する文字列フォーマット
str.format() メソッドでも同じ b 書式指定子を使えます。値をより大きな文字列に埋め込むときに便利です。例の出力に表示されるラベル Value: は英語のままです。f文字列を使うと、より簡潔に書けます。
value = 15
formatted = "Value: {:b}".format(value)
f_string = f"Value: {value:b}"
print(formatted)
print(f_string)
Value: 1111
Value: 1111
2進数の桁数を指定した最小幅までそろえるには、{:08b} や {value:08b} のように、b の前に幅を指定します。どちらの形式も負の整数の符号を保持し、書式設定したフィールドを指定幅以上にします。符号も幅に含まれます。
ビット操作で整数を2進数に変換する
手動で変換するには、& 1 で最下位ビットを繰り返し取り出し、>> で絶対値を右にシフトします。ビットは右から左の順に集まるため、2進数の桁にするには逆順に並べます。以下のヘルパー関数はゼロを明示的に処理し、負の整数はマイナス符号と絶対値の2進数で表します。これはPythonの符号と絶対値による表示方式に合わせたもので、固定幅の2の補数表現ではありません。
def int_to_binary(value):
if value == 0:
return "0"
sign = "-" if value < 0 else ""
magnitude = abs(value)
bits = []
while magnitude:
bits.append(str(magnitude & 1))
magnitude >>= 1
return sign + "".join(reversed(bits))
for number in (15, 0, -10):
print(int_to_binary(number))
1111
0
-1010
この方法はビットの取り出し方を示すものです。通常の変換コードでは bin() や format() のほうが簡単です。ループは絶対値から取り出すビットがなくなると終了し、ゼロの場合は明示的な分岐によって1桁の2進数を返します。絶対値を変換してから符号を別に付けるため、固定幅の2の補数表現を生成するものではありません。プロトコルやハードウェアインターフェースで2進データをやり取りする場合は、幅と表現方式を明示的に選んでください。