[Python] 2進数と10進数を相互変換する方法を解説

Pythonでは、2進数と10進数の相互変換が簡単に行えます。10進数を2進数に変換するには、組み込み関数のbin()を使用します。この関数は整数を受け取り、その2進数表現を文字列として返します。

逆に、2進数を10進数に変換するには、int()関数を利用します。この関数は2つの引数を取り、最初の引数に2進数の文字列、2番目の引数に基数として2を指定します。

これにより、Pythonでの数値変換が効率的に行えます。

この記事でわかること
  • 2進数から10進数への変換方法
  • 10進数から2進数への変換方法
  • ビット演算(AND、OR、XOR)の実装
  • ハフマン符号化によるデータ圧縮の実装
  • XOR暗号を用いた暗号化の実装

目次から探す

Pythonでの2進数と10進数の相互変換

2進数から10進数への変換

int()関数の使い方

Pythonでは、int()関数を使用して2進数を10進数に変換できます。

この関数は、文字列として表現された数値と基数を引数に取ります。

2進数の場合、基数は2です。

具体例とコード

以下のコードは、2進数の文字列を10進数に変換する例です。

# 2進数の文字列
binary_string = "1011"
# 2進数から10進数に変換
decimal_number = int(binary_string, 2)
print(decimal_number)
11

10進数から2進数への変換

bin()関数の使い方

10進数を2進数に変換するには、bin()関数を使用します。

この関数は、整数を引数に取り、その整数の2進数表現を含む文字列を返します。

返される文字列は、先頭に0bが付加されます。

具体例とコード

以下のコードは、10進数の整数を2進数に変換する例です。

# 10進数の整数
decimal_number = 11
# 10進数から2進数に変換
binary_string = bin(decimal_number)
print(binary_string)
0b1011

応用例

2進数を使ったビット演算

AND, OR, XORの基本

ビット演算は、2進数の各ビットに対して行われる演算です。

主なビット演算には以下のものがあります。

スクロールできます
演算説明
AND両方のビットが1のときのみ1
ORどちらかのビットが1のとき1
XOR両方のビットが異なるとき1

Pythonでのビット演算の実装

以下のコードは、AND、OR、XORのビット演算を実装した例です。

# 2つの整数
a = 5  # 2進数で101
b = 3  # 2進数で011
# ビット演算
and_result = a & b
or_result = a | b
xor_result = a ^ b
print(f"AND: {and_result}, OR: {or_result}, XOR: {xor_result}")
AND: 1, OR: 7, XOR: 6

2進数を使ったデータ圧縮

ハフマン符号化の基本

ハフマン符号化は、データ圧縮の手法の一つで、頻出するデータに短いビット列を割り当て、稀なデータには長いビット列を割り当てることで、全体のデータサイズを削減します。

Pythonでのハフマン符号化の実装

以下のコードは、ハフマン符号化の基本的な実装例です。

import heapq
from collections import defaultdict
# ハフマンノードのクラス
class Node:
    def __init__(self, char, freq):
        self.char = char
        self.freq = freq
        self.left = None
        self.right = None
    def __lt__(self, other):
        return self.freq < other.freq
# ハフマン符号化の関数
def huffman_coding(data):
    frequency = defaultdict(int)
    for char in data:
        frequency[char] += 1
    heap = [Node(char, freq) for char, freq in frequency.items()]
    heapq.heapify(heap)
    while len(heap) > 1:
        left = heapq.heappop(heap)
        right = heapq.heappop(heap)
        merged = Node(None, left.freq + right.freq)
        merged.left = left
        merged.right = right
        heapq.heappush(heap, merged)
    return heap[0]
# 使用例
data = "hello huffman"
huffman_tree = huffman_coding(data)

2進数を使った暗号化

XOR暗号の基本

XOR暗号は、データを特定のキーとビット単位で排他的論理和(XOR)を取ることで暗号化する手法です。

この方法は、同じキーを使って暗号化と復号化が可能です。

PythonでのXOR暗号の実装

以下のコードは、XOR暗号の基本的な実装例です。

def xor_encrypt_decrypt(input_string, key):
    return ''.join(chr(ord(c) ^ key) for c in input_string)
# 使用例
original_text = "hello"
key = 123  # 任意の整数
encrypted_text = xor_encrypt_decrypt(original_text, key)
decrypted_text = xor_encrypt_decrypt(encrypted_text, key)
print(f"Encrypted: {encrypted_text}, Decrypted: {decrypted_text}")
Encrypted: , Decrypted: hello

よくある質問

2進数と16進数の変換方法は?

2進数と16進数の変換は、まず2進数を4ビットごとに区切り、それぞれを16進数に変換することで行います。

例えば、2進数10111011は、10111011に分けて、BBに変換し、結果としてBBとなります。

逆に、16進数を2進数に変換する場合は、各16進数の桁を4ビットの2進数に変換します。

2進数の計算で注意すべき点は?

2進数の計算では、キャリーやボローの処理に注意が必要です。

特に、加算や減算を行う際には、ビットの繰り上がりや繰り下がりを正確に管理することが重要です。

また、ビット演算を行う際には、演算の結果が期待通りになるかを確認するために、デバッグを行うことも大切です。

Python以外の言語での2進数と10進数の変換方法は?

多くのプログラミング言語では、2進数と10進数の変換に関する組み込み関数が用意されています。

例えば、JavaではInteger.parseInt(binaryString, 2)を使って2進数から10進数に変換し、Integer.toBinaryString(decimalNumber)を使って10進数から2進数に変換します。

C言語では、strtol()関数を使用して同様の変換が可能です。

まとめ

この記事では、Pythonを用いた2進数と10進数の相互変換方法や、ビット演算、データ圧縮、暗号化の応用例について解説しました。

特に、ビット演算やハフマン符号化、XOR暗号の実装を通じて、2進数の実用的な使い方を学ぶことができました。

ぜひ、これらの知識を活用して、さらに深いプログラミングの理解を深めてみてください。

  • URLをコピーしました!
目次から探す