[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
よくある質問
まとめ
この記事では、Pythonを用いた2進数と10進数の相互変換方法や、ビット演算、データ圧縮、暗号化の応用例について解説しました。
特に、ビット演算やハフマン符号化、XOR暗号の実装を通じて、2進数の実用的な使い方を学ぶことができました。
ぜひ、これらの知識を活用して、さらに深いプログラミングの理解を深めてみてください。