반응형

안녕하세요 Hi Create입니다!

오늘은 저번에 배웠던 형 변환에 덧붙여서 10진수를 임의의 진수로 바꾸는 프로그램을 만들어보려고 합니다.

https://hiittech.tistory.com/66

 

[프로그래밍 기초][파이썬] 22.자료형의 변환

안녕하세요 Hi Create입니다! 이번에는 자료형의 변환에 대해 가져왔습니다. 우리가 프로그래밍을 하다보면 어떤 변수를 다른 자료형으로 바꿀 때가 있습니다. 파이썬에서는 내장 함수들을 통해

hiittech.tistory.com


이 프로그램은 10진수 숫자와 원하는 진수를 입력받아서 변환시켜주는 프로그램입니다.

 

우선 변수를 만들어야겠죠?

# n = 10진수 숫자를 입력받는 변수
# target = 변경하고자하는 진수
# width = 출력 문자열 폭

이런 식으로 만들겁니다.

 

우선 원리부터 살펴봅시다.

우리가 사용하는 보통의 숫자는 10진법 숫자, 즉 10진수입니다.

그리고 우리가 컴퓨터와 대화할 때 쓰는 것은 2진수죠. 그외에도 대표적으로 8진수, 16진수 등이 있습니다.

 

10진수를 다른 진수로 변환할 때는 10진수를 해당 진수 숫자로 나눕니다.

예를 들어 7을 2진수로 나타내려면 7을 2로 나누는 것이죠. 이걸 계속 반복해줍니다.

정리하자면 10진수를 다른 진수로 바꿀 때는 다른 진수의 숫자(2진수면 2, 8진수면 8)로 나누면 됩니다.

위의 그림을 볼까요? 8을 2로 나누는데 몫이 1이 나올 때까지 나눕니다. 그러면 중간에 나오는 나머지들이 모두 0이죠?

그럼 2진수로 8은 '1000'이 되는 것입니다.

프로그램으로는 어떻게 할 수 있을까요?

우선 10진수 숫자를 변환하고자 하는 진수로 나누고 몫과 나머지를 각각 2개의 변수에 저장합니다.

그 이후에 나머지를 문자열로 만들어서 원래있던 문자 앞에 넣으면 됩니다.

아래 코드를 보면서 만들어봅시다.

 

우리는 사용자 지정함수로 int2digital이라는 함수를 만들었습니다.

여기에 입력받은 세 개의 변수를 넣었죠.(n, target, width)

이 함수에는 res가 존재하는데 이것은 우리가 출력할 문자열을 저장하는 곳입니다.

n값이 1이 될 때까지 나누기를 할 겁니다.

divmod는 앞의 숫자(n)를 뒤의 숫자(target)으로 나누고 몫, 나머지 순서로 나오게하는 함수입니다.

즉, n에는 몫이, r에는 나머지가 저장되는 것이죠.

그리고 10진법이 넘어가는 것부턴(11진법, 12진법...) 알파벳을 사용해서 표시하는데요. 이 상황을 아스키 코드를 통해 해결했습니다. 이렇게 만들어진 r을 원래있던 문자열의 앞에 저장되도록 만들었습니다.

 

예를 들어, 8을 2진수로 바꿀때

0

00

000

1000

이런식으로 계산되는 것이죠.

 

그 이후에는 출력 폭을 결정하는데요. 이것은 표기의 문제라고 생각하시면 됩니다.

2진법은 보통 8자리를 단위로 사용하는데 이럴 때는 앞에 0을 붙여줍니다.

8은 '00001000'이 되는 것이죠.

이때 사용하는 것이 zfill입니다. 이것은 문자열 앞을 0으로 채워주는 메소드인데

.zfill(자리수)로 사용합니다.

 

결과


이렇게 우리가 원하는 진법으로 수를 바꾸는 프로그램을 만들어 봤습니다.

이해가 잘 되셨을지는 모르겠네요 진법 변환은 정보처리기능사, 기사처럼 자격증을 딸 때 항상 나오는 주제입니다.

그 과정과 원리만 이해하신다면 반대로 10진법으로 변환하는 프로그램을 만들어보실 수 있을거에요

 

오늘은 이만 포스팅을 마치도록 하겠습니다 감사합니다!!

반응형

BELATED ARTICLES

more