진법 개요
- 2진법 (Binary): 2개의 숫자(0과 1)만을 사용합니다. 컴퓨터 시스템의 기본 수 체계입니다.
- 10진법 (Decimal): 10개의 숫자(0부터 9)로 구성되며, 일상 생활에서 사용하는 수 체계입니다.
- 16진법 (Hexadecimal): 16개의 숫자(0부터 9와 A부터 F)로 구성되며, 컴퓨터 과학에서 메모리 주소나 색상 코드 등을 나타내기 위해 사용됩니다.
변환 방법
- 2진법에서 10진법으로 변환
- 각 자리 숫자에 2의 자릿수 승수를 곱하여 더합니다.
- 예: 1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11₁₀
- 10진법에서 2진법으로 변환
- 숫자를 2로 나누고, 나머지를 기록한 후, 몫이 0이 될 때까지 반복합니다. 나머지를 역순으로 읽습니다.
- 예: 11₁₀ → 11 ÷ 2 = 5 (나머지 1), 5 ÷ 2 = 2 (나머지 1), 2 ÷ 2 = 1 (나머지 0), 1 ÷ 2 = 0 (나머지 1) → 1011₂
- 10진법에서 16진법으로 변환
- 숫자를 16으로 나누고, 나머지를 기록한 후, 몫이 0이 될 때까지 반복합니다. 나머지를 역순으로 읽습니다.
- 예: 255₁₀ → 255 ÷ 16 = 15 (나머지 15, 즉 F), 15 ÷ 16 = 0 (나머지 15, 즉 F) → FF₁₆
- 16진법에서 10진법으로 변환
- 각 자리 숫자에 16의 자릿수 승수를 곱하여 더합니다.
- 예: 1A₁₆ = 1×16¹ + 10×16⁰ = 16 + 10 = 26₁₀
- 2진법에서 16진법으로 변환
- 2진법 숫자를 4자리씩 끊어 각각을 16진법 숫자로 변환합니다.
- 예: 11010110₂ → 1101₂(13) 0110₂(6) → D6₁₆
- 16진법에서 2진법으로 변환
- 16진법 숫자를 각각의 숫자를 4자리 2진법 숫자로 변환합니다.
- 예: D6₁₆ → D(13) = 1101₂, 6 = 0110₂ → 11010110₂
Python으로 변환 구현
라이브러리 없이 구현
# 2진법 -> 10진법
def binary_to_decimal(binary_str):
decimal = 0
for i, digit in enumerate(reversed(binary_str)):
decimal += int(digit) * (2 ** i)
return decimal
# 10진법 -> 2진법
def decimal_to_binary(decimal):
if decimal == 0:
return "0"
binary_str = ""
while decimal > 0:
binary_str = str(decimal % 2) + binary_str
decimal //= 2
return binary_str
# 10진법 -> 16진법
def decimal_to_hex(decimal):
if decimal == 0:
return "0"
hex_str = ""
hex_digits = "0123456789ABCDEF"
while decimal > 0:
hex_str = hex_digits[decimal % 16] + hex_str
decimal //= 16
return hex_str
# 16진법 -> 10진법
def hex_to_decimal(hex_str):
decimal = 0
hex_digits = "0123456789ABCDEF"
for i, digit in enumerate(reversed(hex_str)):
decimal += hex_digits.index(digit) * (16 ** i)
return decimal
# 2진법 -> 16진법
def binary_to_hex(binary_str):
decimal = binary_to_decimal(binary_str)
return decimal_to_hex(decimal)
# 16진법 -> 2진법
def hex_to_binary(hex_str):
decimal = hex_to_decimal(hex_str)
return decimal_to_binary(decimal)
# Test the functions
print(binary_to_decimal("1011")) # Output: 11
print(decimal_to_binary(11)) # Output: 1011
print(decimal_to_hex(255)) # Output: FF
print(hex_to_decimal("1A")) # Output: 26
print(binary_to_hex("11010110")) # Output: D6
print(hex_to_binary("D6")) # Output: 11010110
라이브러리를 사용한 구현
Python의 int와 bin, hex 함수를 사용하여 간편하게 변환할 수 있습니다.
# 2진법 -> 10진법
def binary_to_decimal(binary_str):
return int(binary_str, 2)
# 10진법 -> 2진법
def decimal_to_binary(decimal):
return bin(decimal)[2:]
# 10진법 -> 16진법
def decimal_to_hex(decimal):
return hex(decimal)[2:].upper()
# 16진법 -> 10진법
def hex_to_decimal(hex_str):
return int(hex_str, 16)
# 2진법 -> 16진법
def binary_to_hex(binary_str):
decimal = int(binary_str, 2)
return hex(decimal)[2:].upper()
# 16진법 -> 2진법
def hex_to_binary(hex_str):
decimal = int(hex_str, 16)
return bin(decimal)[2:]
# Test the functions
print(binary_to_decimal("1011")) # Output: 11
print(decimal_to_binary(11)) # Output: 1011
print(decimal_to_hex(255)) # Output: FF
print(hex_to_decimal("1A")) # Output: 26
print(binary_to_hex("11010110")) # Output: D6
print(hex_to_binary("D6")) # Output: 11010110
'CS' 카테고리의 다른 글
Url vs Uri 차이 (0) | 2025.06.09 |
---|---|
서브넷 마스크 (0) | 2024.06.14 |
IPv4 vs IPv6 특징과 차이점 (1) | 2024.06.11 |