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

Pythonで10進数を2進数に変換する方法 プログラミングの疑問解決

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 が付きます。
【接頭辞なしの2進数文字列が欲しい】
bin(x)[2:] のようにスライスするか、f-string f'{x:b}’ を使うのがスマートです。
【桁数を8桁などに揃えたい(ゼロパディング)】
f-string f'{x:08b}’ を使うのが最も簡単で推奨される方法です。
【負の数を2の補数で表現したい】
number & mask のようなビット演算を使い、ビット長を意識した計算をしてください。
【(逆引き)2進数文字列を10進数に戻したい】
int(‘1101’, 2) のように、int() 関数の第2引数を使いましょう。

これらの方法を使い分けることで、Pythonにおける10進数と2進数の変換を自由自在に行えるようになります。

Follow me!

PAGE TOP