파일 업로드

진법 변환하기

profile
첨부파일
첨부된 파일이 없습니다.

여기서는 2진법, 8진법, 16진법을 대상으로 설명하겠습니다.

 

2진법이란?

2진법(Binary System)은 두 개의 숫자, 0과 1을 사용하여 모든 수를 표현하는 숫자 체계입니다. 

특히 디지털 전자기기, 컴퓨터 시스템 등에서 데이터의 저장과 처리에 사용됩니다. 

2진법은 기수법 중 하나로, 기수는 2이며, 각 자리의 숫자는 2의 거듭제곱을 나타냅니다.

 

2진법의 기본 원리

2진법에서는 각 자리가 0 또는 1을 나타내며, 각 자리는 2의 거듭제곱으로 값을 가집니다. 

오른쪽에서 왼쪽으로 갈수록 자릿수는 증가하며, 각 자리의 값은 그 자릿수의 2의 거듭제곱과 해당 자리의 숫자(0 또는 1)를 곱한 값입니다.

 

2진법과 10진법의 차이

  • 10진법(Decimal System): 10개의 숫자(0-9)를 사용하여 수를 표현합니다. 각 자리의 값은 10의 거듭제곱으로 나타내며, 오른쪽에서 왼쪽으로 갈수록 자릿수는 증가합니다.
  • 2진법(Binary System): 2개의 숫자(0과 1)만을 사용하여 수를 표현합니다. 각 자리의 값은 2의 거듭제곱으로 나타내며, 오른쪽에서 왼쪽으로 갈수록 자릿수는 증가합니다.

 

그럼 2진수 1011이 나타났을 때 우리가 익숙한 10진법으로 이해하려면, 어떻게 바꾸어야 할까요?

2진수 1011을 10진법으로 변환해보기

각 자리의 값을 계산해 보면:

  • 1 * \(2^3\) = 1 * 8 = 8
  • 0 * \(2^2\) = 0 * 4 = 0
  • 1 * \(2^1\) = 1 * 2 = 2
  • 1 * \(2^0\) = 1 * 1 = 1

이 값들을 모두 더하면 8 + 0 + 2 + 1 = 11이 됩니다. 따라서 2진수 1011은 10진수로 11을 나타냅니다.

 

10진수를 2진수로 변환

10진수를 2진수로 변환하는 방법 중 하나는 나눗셈 방법입니다. 10진수를 2로 나누고, 나머지를 기록하며, 몫이 0이 될 때까지 반복합니다. 기록한 나머지를 역순으로 읽으면 2진수가 됩니다.

예시: 10진수 13을 2진수로 변환

  1. 13 ÷ 2 = 6, 나머지 1
  2. 6 ÷ 2 = 3, 나머지 0
  3. 3 ÷ 2 = 1, 나머지 1
  4. 1 ÷ 2 = 0, 나머지 1

나머지를 역순으로 읽으면 2진수 1101이 됩니다.

 

 

2진법의 장점

  1. 단순함: 2개의 숫자만 사용하므로, 디지털 회로와 전자기기에서 구현하기 쉽습니다.
  2. 신뢰성: 전자기기에서 0과 1은 명확히 구분되는 신호 상태(꺼짐과 켜짐)로 표현할 수 있어, 신뢰성 높은 데이터 저장과 처리가 가능합니다.
  3. 연산 용이성: 2진법은 컴퓨터의 기본 연산 체계로, 디지털 회로 설계와 구현이 용이합니다.

 

2진법과 컴퓨터

컴퓨터 시스템은 2진법을 사용하여 데이터를 처리합니다. 각 비트(bit)는 0 또는 1의 값을 가지며, 여러 비트를 조합하여 더 큰 데이터를 표현합니다. 예를 들어, 8비트는 1바이트(byte)를 구성하며, 1바이트는 0부터 255까지의 256가지 값을 표현할 수 있습니다.

 

 

요약

  • 2진법은 0과 1의 두 개 숫자만을 사용하여 수를 표현하는 숫자 체계입니다.
  • 각 자리의 값은 2의 거듭제곱으로 나타내며, 오른쪽에서 왼쪽으로 갈수록 자릿수는 증가합니다.
  • 2진법의 장점: 단순함, 신뢰성, 연산 용이성.
  • 컴퓨터 시스템은 2진법을 사용하여 데이터를 처리하고 저장합니다.
  • 10진수를 2진수로 변환: 나눗셈 방법을 사용.
  • 2진수를 10진수로 변환: 각 자리의 값을 계산하여 더함.

 

파이썬 코드로 작성해보기

 

1. 10진법에서 다른 진법으로 변환

고전적인 방법으로 10진법 숫자를 다른 진법으로 변환하는 함수는 다음과 같습니다.

10진법에서 2진법으로 변환

def decimal_to_binary(decimal_number):
    if decimal_number == 0:
        return "0"
    binary_number = ""
    while decimal_number > 0:
        binary_number = str(decimal_number % 2) + binary_number
        decimal_number = decimal_number // 2
    return binary_number

# 예시
decimal_number = 42
print("2진법:", decimal_to_binary(decimal_number))  # 출력: 101010

10진법에서 8진법으로 변환

def decimal_to_octal(decimal_number):
    if decimal_number == 0:
        return "0"
    octal_number = ""
    while decimal_number > 0:
        octal_number = str(decimal_number % 8) + octal_number
        decimal_number = decimal_number // 8
    return octal_number

# 예시
decimal_number = 42
print("8진법:", decimal_to_octal(decimal_number))  # 출력: 52

10진법에서 16진법으로 변환

def decimal_to_hexadecimal(decimal_number):
    if decimal_number == 0:
        return "0"
    hexadecimal_number = ""
    hex_digits = "0123456789abcdef"
    while decimal_number > 0:
        hexadecimal_number = hex_digits[decimal_number % 16] + hexadecimal_number
        decimal_number = decimal_number // 16
    return hexadecimal_number

# 예시
decimal_number = 42
print("16진법:", decimal_to_hexadecimal(decimal_number))  # 출력: 2a

 

2. 다른 진법에서 10진법으로 변환

고전적인 방법으로 다른 진법 숫자를 10진법으로 변환하는 함수는 다음과 같습니다.

2진법에서 10진법으로 변환

def binary_to_decimal(binary_number):
    decimal_number = 0
    power = 0
    for digit in reversed(binary_number):
        decimal_number += int(digit) * (2 ** power)
        power += 1
    return decimal_number

# 예시
binary_number = "101010"
print("10진법:", binary_to_decimal(binary_number))  # 출력: 42

8진법에서 10진법으로 변환

def octal_to_decimal(octal_number):
    decimal_number = 0
    power = 0
    for digit in reversed(octal_number):
        decimal_number += int(digit) * (8 ** power)
        power += 1
    return decimal_number

# 예시
octal_number = "52"
print("10진법:", octal_to_decimal(octal_number))  # 출력: 42

16진법에서 10진법으로 변환

def hexadecimal_to_decimal(hexadecimal_number):
    decimal_number = 0
    power = 0
    hex_digits = "0123456789abcdef"
    for digit in reversed(hexadecimal_number):
        decimal_number += hex_digits.index(digit) * (16 ** power)
        power += 1
    return decimal_number

# 예시
hexadecimal_number = "2a"
print("10진법:", hexadecimal_to_decimal(hexadecimal_number))  # 출력: 42

 

 

 

파이썬 내장함수 사용하기

파이썬에서는 숫자의 진법 변환을 쉽게 수행할 수 있습니다.

1. 10진법에서 다른 진법으로 변환

파이썬에는 10진법에서 다른 진법으로 변환하기 위한 내장 함수가 있습니다.

2진법으로 변환 (bin() 함수)

decimal_number = 42
binary_number = bin(decimal_number)
print(binary_number)  # 출력: 0b101010

bin() 함수는 10진법 숫자를 2진법 문자열로 변환하며, 결과 문자열의 앞에 0b가 붙습니다.

 

8진법으로 변환 (oct() 함수)

decimal_number = 42
octal_number = oct(decimal_number)
print(octal_number)  # 출력: 0o52

oct() 함수는 10진법 숫자를 8진법 문자열로 변환하며, 결과 문자열의 앞에 0o가 붙습니다.

 

16진법으로 변환 (hex() 함수)

decimal_number = 42
hexadecimal_number = hex(decimal_number)
print(hexadecimal_number)  # 출력: 0x2a

hex() 함수는 10진법 숫자를 16진법 문자열로 변환하며, 결과 문자열의 앞에 0x가 붙습니다.

 

2. 다른 진법에서 10진법으로 변환

다른 진법에서 10진법으로 변환하기 위해서는 int() 함수를 사용할 수 있습니다.

2진법에서 10진법으로 변환

binary_number = "101010"
decimal_number = int(binary_number, 2)
print(decimal_number)  # 출력: 42

int() 함수의 두 번째 인자로 진법을 지정하여 2진법 문자열을 10진법 숫자로 변환할 수 있습니다.

 

8진법에서 10진법으로 변환

octal_number = "52"
decimal_number = int(octal_number, 8)
print(decimal_number)  # 출력: 42

int() 함수의 두 번째 인자로 8진법을 지정하여 8진법 문자열을 10진법 숫자로 변환할 수 있습니다.

 

16진법에서 10진법으로 변환

hexadecimal_number = "2a"
decimal_number = int(hexadecimal_number, 16)
print(decimal_number)  # 출력: 42

int() 함수의 두 번째 인자로 16진법을 지정하여 16진법 문자열을 10진법 숫자로 변환할 수 있습니다.

 

파이썬에서는 10진법과 다른 진법(2진법, 8진법, 16진법) 간의 변환을 위해 내장 함수(bin(), oct(), hex() 및 int())를 사용할 수 있으며, 직접 진법 변환 함수를 작성할 수도 있습니다. 

이러한 방법들을 사용하여 다양한 진법 간의 변환을 수행해보세요!