여기서는 2진법, 8진법, 16진법을 대상으로 설명하겠습니다.
2진법이란?
2진법(Binary System)은 두 개의 숫자, 0과 1을 사용하여 모든 수를 표현하는 숫자 체계입니다.
특히 디지털 전자기기, 컴퓨터 시스템 등에서 데이터의 저장과 처리에 사용됩니다.
2진법은 기수법 중 하나로, 기수는 2이며, 각 자리의 숫자는 2의 거듭제곱을 나타냅니다.
2진법의 기본 원리
2진법에서는 각 자리가 0 또는 1을 나타내며, 각 자리는 2의 거듭제곱으로 값을 가집니다.
오른쪽에서 왼쪽으로 갈수록 자릿수는 증가하며, 각 자리의 값은 그 자릿수의 2의 거듭제곱과 해당 자리의 숫자(0 또는 1)를 곱한 값입니다.
2진법과 10진법의 차이
그럼 2진수 1011이 나타났을 때 우리가 익숙한 10진법으로 이해하려면, 어떻게 바꾸어야 할까요?
2진수 1011을 10진법으로 변환해보기
각 자리의 값을 계산해 보면:
이 값들을 모두 더하면 8 + 0 + 2 + 1 = 11이 됩니다. 따라서 2진수 1011은 10진수로 11을 나타냅니다.
10진수를 2진수로 변환
10진수를 2진수로 변환하는 방법 중 하나는 나눗셈 방법입니다. 10진수를 2로 나누고, 나머지를 기록하며, 몫이 0이 될 때까지 반복합니다. 기록한 나머지를 역순으로 읽으면 2진수가 됩니다.
예시: 10진수 13을 2진수로 변환
나머지를 역순으로 읽으면 2진수 1101이 됩니다.
2진법의 장점
2진법과 컴퓨터
컴퓨터 시스템은 2진법을 사용하여 데이터를 처리합니다. 각 비트(bit)는 0 또는 1의 값을 가지며, 여러 비트를 조합하여 더 큰 데이터를 표현합니다. 예를 들어, 8비트는 1바이트(byte)를 구성하며, 1바이트는 0부터 255까지의 256가지 값을 표현할 수 있습니다.
파이썬 코드로 작성해보기
고전적인 방법으로 10진법 숫자를 다른 진법으로 변환하는 함수는 다음과 같습니다.
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
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
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
고전적인 방법으로 다른 진법 숫자를 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
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
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
파이썬 내장함수 사용하기
파이썬에서는 숫자의 진법 변환을 쉽게 수행할 수 있습니다.
파이썬에는 10진법에서 다른 진법으로 변환하기 위한 내장 함수가 있습니다.
decimal_number = 42
binary_number = bin(decimal_number)
print(binary_number) # 출력: 0b101010
bin() 함수는 10진법 숫자를 2진법 문자열로 변환하며, 결과 문자열의 앞에 0b가 붙습니다.
decimal_number = 42
octal_number = oct(decimal_number)
print(octal_number) # 출력: 0o52
oct() 함수는 10진법 숫자를 8진법 문자열로 변환하며, 결과 문자열의 앞에 0o가 붙습니다.
decimal_number = 42
hexadecimal_number = hex(decimal_number)
print(hexadecimal_number) # 출력: 0x2a
hex() 함수는 10진법 숫자를 16진법 문자열로 변환하며, 결과 문자열의 앞에 0x가 붙습니다.
다른 진법에서 10진법으로 변환하기 위해서는 int() 함수를 사용할 수 있습니다.
binary_number = "101010"
decimal_number = int(binary_number, 2)
print(decimal_number) # 출력: 42
int() 함수의 두 번째 인자로 진법을 지정하여 2진법 문자열을 10진법 숫자로 변환할 수 있습니다.
octal_number = "52"
decimal_number = int(octal_number, 8)
print(decimal_number) # 출력: 42
int() 함수의 두 번째 인자로 8진법을 지정하여 8진법 문자열을 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())를 사용할 수 있으며, 직접 진법 변환 함수를 작성할 수도 있습니다.
이러한 방법들을 사용하여 다양한 진법 간의 변환을 수행해보세요!