CS

2진법,10진법,16진법 변환

정도윤 2024. 6. 7. 19:08

진법 개요

  1. 2진법 (Binary): 2개의 숫자(0과 1)만을 사용합니다. 컴퓨터 시스템의 기본 수 체계입니다.
  2. 10진법 (Decimal): 10개의 숫자(0부터 9)로 구성되며, 일상 생활에서 사용하는 수 체계입니다.
  3. 16진법 (Hexadecimal): 16개의 숫자(0부터 9와 A부터 F)로 구성되며, 컴퓨터 과학에서 메모리 주소나 색상 코드 등을 나타내기 위해 사용됩니다.

변환 방법

  1. 2진법에서 10진법으로 변환
    • 각 자리 숫자에 2의 자릿수 승수를 곱하여 더합니다.
    • 예: 1011₂ = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 0 + 2 + 1 = 11₁₀
  2. 10진법에서 2진법으로 변환
    • 숫자를 2로 나누고, 나머지를 기록한 후, 몫이 0이 될 때까지 반복합니다. 나머지를 역순으로 읽습니다.
    • 예: 11₁₀ → 11 ÷ 2 = 5 (나머지 1), 5 ÷ 2 = 2 (나머지 1), 2 ÷ 2 = 1 (나머지 0), 1 ÷ 2 = 0 (나머지 1) → 1011₂
  3. 10진법에서 16진법으로 변환
    • 숫자를 16으로 나누고, 나머지를 기록한 후, 몫이 0이 될 때까지 반복합니다. 나머지를 역순으로 읽습니다.
    • 예: 255₁₀ → 255 ÷ 16 = 15 (나머지 15, 즉 F), 15 ÷ 16 = 0 (나머지 15, 즉 F) → FF₁₆
  4. 16진법에서 10진법으로 변환
    • 각 자리 숫자에 16의 자릿수 승수를 곱하여 더합니다.
    • 예: 1A₁₆ = 1×16¹ + 10×16⁰ = 16 + 10 = 26₁₀
  5. 2진법에서 16진법으로 변환
    • 2진법 숫자를 4자리씩 끊어 각각을 16진법 숫자로 변환합니다.
    • 예: 11010110₂ → 1101₂(13) 0110₂(6) → D6₁₆
  6. 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