Pythonでプログラミングをしていると、10進数を2進数に変換したい場面が時々あります。
例えば、ビット演算を行ったり、データの内部構造を理解したりする際に必要となるでしょう。
Pythonには、10進数を2進数に変換するための便利な機能がいくつも用意されています。
この記事では、基本的な方法から応用的な使い方まで、具体的なソースコードを紹介しながらわかりやすく解説していきます。
【本記事の信頼性】
- 執筆者は元エンジニア
- 大手プログラミングスクールのWebディレクター兼ライターを経験
- 自らも地元密着型のプログラミングスクールを運営
プログラミングスクール
■Webエンジニアの育成に特化 ■自社開発企業への転職成功率がダントツ ■ハイスキルを求める人に最適 |
|
■サポートは半永久的 ■単価80万円以上の講師陣 ■AWSやJavaに強い |
|
■受講料完全無料 ■最短1か月で卒業 ■教室への通学も可能 |
まず結論:最も簡単な方法はbin()関数
Pythonで10進数を2進数に変換する最も簡単で一般的な方法は、組み込み関数のbin()を使用することです。
この関数は、任意の整数を2進数の文字列として返してくれます。
# 基本的な使用例
decimal_number = 10
binary_result = bin(decimal_number)
print(binary_result) # 出力: 0b1010
上記のコードでは、10進数の10を2進数に変換しています。
結果として「0b1010」が出力されますが、「0b」は2進数であることを示す接頭辞(プレフィックス)です。
bin()関数を使った最も基本的な変換方法
それでは、bin()
関数の具体的な使い方を見ていきます。
非常にシンプルなので、すぐに覚えることができるでしょう。
bin()関数の使い方と「0b」の意味
bin()関数は、引数として整数を受け取り、その数値の2進数表現を文字列として返します。
返される文字列は必ず「0b」で始まりますが、これは2進数(binary)を表す接頭辞です。
# 複数の例で確認
numbers = [5, 15, 32, 255]
for num in numbers:
binary = bin(num)
print(f"{num} の2進数表現: {binary}")
# 出力:
# 5 の2進数表現: 0b101
# 15 の2進数表現: 0b1111
# 32 の2進数表現: 0b100000
# 255 の2進数表現: 0b11111111
このコードでは、複数の10進数を一度に変換して確認できます。
各数値がどのような2進数表現になるかが、わかりやすく表示されるでしょう。
接頭辞「0b」を削除して2進数の文字列だけを取り出す方法
多くの場合、「0b」接頭辞は不要で、純粋な2進数の文字列だけが欲しい場合があります。
この場合は、文字列のスライス機能を使って「0b」を除去しましょう。
# 接頭辞を削除する方法
decimal_number = 42
binary_with_prefix = bin(decimal_number)
binary_without_prefix = bin(decimal_number)[2:]
print(f"接頭辞あり: {binary_with_prefix}") # 出力: 0b101010
print(f"接頭辞なし: {binary_without_prefix}") # 出力: 101010
[2:]は、文字列の3文字目以降を取得するスライス記法です。
「0b」が先頭の2文字なので、3文字目以降が純粋な2進数の部分になります。
format()やf-stringで書式を指定して変換する
bin()
関数以外にも、format()
関数や f-string(フォーマット済み文字列リテラル) を使って2進数に変換する方法があります。
これらの方法は、特に桁数を揃えたい場合などに非常に便利です。
format()やf-stringで接頭辞なしの2進数に変換する
bin()関数以外にも、format()関数やf-string(フォーマット文字列リテラル)を使って2進数に変換することができます。
これらの方法では、最初から接頭辞なしの2進数文字列を取得可能です。
# format()関数を使った変換
decimal_number = 25
binary_format = format(decimal_number, 'b')
print(f"format()使用: {binary_format}") # 出力: 11001
# f-stringを使った変換
binary_fstring = f"{decimal_number:b}"
print(f"f-string使用: {binary_fstring}") # 出力: 11001
これらの方法では、書式指定子「b」を使用することで、直接2進数形式の文字列を取得できます。
接頭辞を後から削除する必要がないため、より効率的でしょう。
桁数を揃える(ゼロパディング)方法
実際のプログラムでは、2進数の桁数を揃えたい場合があります。
例えば、8ビットや16ビットの固定長で表示したい場合です。
# 8桁にゼロパディングする例
numbers = [5, 15, 32, 255]
for num in numbers:
# format()を使用
binary_8bit = format(num, '08b')
print(f"{num:3d} → {binary_8bit}")
# 出力:
# 5 → 00000101
# 15 → 00001111
# 32 → 00100000
# 255 → 11111111
「08b」の書式指定では、「0」がゼロパディングを指定し、「8」が全体の桁数、「b」が2進数を表しています。
これにより、すべての数値が8桁の2進数として表示されます。
# f-stringでも同様に実現可能
number = 42
binary_16bit = f"{number:016b}"
print(f"{number} の16ビット表現: {binary_16bit}")
# 出力: 42 の16ビット表現: 0000000000101010
【応用】さまざまな10進数を2進数に変換する
ここまでは正の整数の変換を見てきましたが、負の数を扱う方法も確認しておきましょう。
負の10進数を2進数(2の補数)に変換する方法
負の数を2進数に変換する場合、Pythonは2の補数表現を使用します。
ただし、bin()関数では負の数に対して「-0b」の形式で表示されるため、実際の2の補数表現を得るには工夫が必要です。
# 負の数のbin()での表示
negative_number = -10
print(f"bin({negative_number}) = {bin(negative_number)}") # 出力: -0b1010
# 2の補数表現を取得する方法(8ビットの場合)
def to_twos_complement(num, bits=8):
if num >= 0:
return format(num, f'0{bits}b')
else:
# 2の補数を計算
complement = (1 << bits) + num
return format(complement, f'0{bits}b')
# 使用例
positive_num = 10
negative_num = -10
print(f"{positive_num} の8ビット表現: {to_twos_complement(positive_num)}")
print(f"{negative_num} の8ビット表現: {to_twos_complement(negative_num)}")
# 出力:
# 10 の8ビット表現: 00001010
# -10 の8ビット表現: 11110110
この関数では、負の数に対して(1 << bits) + numで2の補数を計算しています。
1 << bitsは2^bitsを意味し、8ビットの場合は256になります。
逆引き:2進数を10進数に変換する方法
逆に、2進数の文字列を10進数の整数に変換する方法も見ておきましょう。
これには int()
関数を使います。
int()関数で2進数の文字列を10進数に変換する
2進数から10進数への変換も頻繁に行われる操作です。
int()関数の第2引数に基数を指定することで実現できます。
# 2進数文字列から10進数への変換
binary_strings = ['1010', '1111', '100000', '11111111']
for binary in binary_strings:
decimal = int(binary, 2)
print(f"2進数 {binary} → 10進数 {decimal}")
# 出力:
# 2進数 1010 → 10進数 10
# 2進数 1111 → 10進数 15
# 2進数 100000 → 10進数 32
# 2進数 11111111 → 10進数 255
int()関数の第2引数「2」は、第1引数の文字列を2進数として解釈することを指定しています。接頭辞「0b」がある場合でも正しく処理されます。
# 接頭辞がある場合の処理
binary_with_prefix = '0b1010'
binary_without_prefix = '1010'
decimal1 = int(binary_with_prefix, 2)
decimal2 = int(binary_without_prefix, 2)
print(f"{binary_with_prefix} → {decimal1}") # 出力: 0b1010 → 10
print(f"{binary_without_prefix} → {decimal2}") # 出力: 1010 → 10
まとめ:目的別に見る10進数から2進数への変換方法
以上、Pythonにおける、10進数から2進数への変換方法などについて解説してきました。
最後に、これまで見てきた方法を目的別に整理してみます。
bin() 関数を使いましょう。接頭辞 0b が付きます。
bin(x)[2:] のようにスライスするか、f-string f'{x:b}’ を使うのがスマートです。
f-string f'{x:08b}’ を使うのが最も簡単で推奨される方法です。
number & mask のようなビット演算を使い、ビット長を意識した計算をしてください。
int(‘1101’, 2) のように、int() 関数の第2引数を使いましょう。
これらの方法を使い分けることで、Pythonにおける10進数と2進数の変換を自由自在に行えるようになります。