진법 변환, 어떻게 쉽게 하지?

진법 변환을 위한 방법

진법을 배웠지만 진법을 서로 바꿔서 사용을 할 수 있어야 하는 걸 아시죠? 진법이야 이론적인 이야기로 이래서 10진법 이구나 아니면 16진법 이구나 하면서 이해를 하셨지만 10진법에서 16진법으로 바꾸려고 하니 연산이 들어가니 어렵다고 느끼시는 마음 저도 충분히 이해를 합니다. 저도 진법에 대한 이해를 한 이후에 진법 변환을 듣고 진법 변환 문제를 틀린 기억이 납니다.

그렇게 틀리기도 했던 제가 하는 방법을 생각하고 공부를 해보니 충분히 변환을 할 수 있고 프로그래밍을 구현을 할 때 유용하게 사용을 하여서 에러가 발생하는 문제를 해결을 했습니다.  이 글을 보시면 좀 더 쉽게 진법 변환을 하실 수 있습니다.

진법 변환을 하는 방법을 상세히 담았습니다. 이 글을 읽고 진법 변환을 한다면 진법에 대한 이해도 좋아지고 프로그래밍에 접목을 해서 생각을 해볼 수 있습니다.

진법 변환이란?

현재의 진법을 다른 진법으로 변환하는 것을 진법 변환이라고 부릅니다. 현재 많이 사용하고 있는 진법은 10진법, 2진법, 8진법, 16진법입니다. 현재 10진법을 2진법으로 또는 2진법을 16진법으로 변경을 하는 것을 말합니다.

여기서 2진법을 이전 진법 이란?에서 간단히 말씀드린 2진수는 0과 1밖에 표현이 불가능한데 어떻게 그 이상의 값들이 표현을 할 수 있는지 자세히 알아보겠습니다.

진법 변환 방법

1. 2진법 -> 10진법의 계산 방법

2의7승 2의6승 2의5승 2의4승 2의3승 2의2승 2의1승 2의0승
0 0 1 0 0 1 1 0

위의 표처럼 자리별로 2의 승수값이 있습니다. 숫자가 앞으로 갈 수록 승수가 커지게 됩니다. 

그리고 0이 아니라 1이 있는 자리에 2의 승수를 곱해서 값을 구하고 모두 구하면 2진법을 10진법으로 진법 변환을 할 수 있습니다.

예를 들어 위의 표의 2진법 값을 보면 2의 5승에 1, 2의 2승의 1, 2의 1승의 1 이렇게 1이 있습니다. 그럼 2의 5승은 32이고 2의 2승은 4 마지막으로 2의 1승은 2입니다. 이 모든 값을 더하면 32+4+2 = 38이 됩니다.

2진수 00100110은 10진수로 38이 되는 것입니다.

2. 2진법 -> 8진법의 계산 방법

2의1승 2의0승 2의2승 2의1승 2의0승 2의2승 2의1승 2의0승
0 0 1 0 0 1 1 0

위의 표를 보면 2의 2승 2의 1승 2의 0승 이렇게 3개의 자리가 모두 1이라면 4 + 2 + 1이 됩니다. 그러면 7이되고 7에서 1을 더해져서 8일 될 때 자릿수가 올라가기 때문에 8진법이 됩니다. 위와 같은 경우로 보시면 2진수는 표현하는 길이가 길이서 3자리씩 끊어서 표현하는 것이 8진수 입니다. 이렇게 2진수에 의해서 8진수가 파생이 됐다고 보시면 됩니다.

예를 들어 위의 값을 8진법으로 바꿔서 표현을 한다면 뒤에 3자리에 2의 2승, 2의 1승 1이 있습니다. 그러면 마지막 자리의 숫자는 6이 됩니다. 마지막 바로 앞의 자리의 값은 2의 2승에만 1이 있기 때문에 4가 됩니다. 그래서 합쳐서 46이 됩니다.

※ 8진수의 46은 현재 사람들이 사용하고 있는 사십육이 아닙니다. 참고 해주세요.

3. 2진법 -> 16진법으로 계산 방법

2의3승 2의2승 2의1승 2의0승 2의3승 2의2승 2의1승 2의0승
0 0 1 0 0 1 1 0

2번에 나왔던 2진법을 8진법으로 변환을 한 내용과 일맥상통합니다. 하지만 16진수이기 때문에 3자리가 아니라 4자리로 끊어서 값을 읽어야 합니다. 2의 4승, 3승, 2승, 1승 이걸 모두 더하면 8+4+2+1= 15가 됩니다. 15에 1을 더하면 자리 올림이 발생하기 때문에 16진법이 됩니다. 16진법도 8진법과 함께 2진법에 파생되서 나왔다고 볼 수 있습니다. 

예를 들어 값을 16진법으로 바꾸면 앞의 4개자리에서 2의 1승 2가 되고 뒤에 4자리에서 2의 2승, 1승이기 때문에 6이 됩니다. 그래서 자릿수를 합치면 16진법으로 26이 됩니다.

※16진수의 26은 현재 사람들이 사용하고 있는 이십육이 아닙니다. 참고해주세요.

4. 10진법 -> 2진법으로 계산 방법

10진법을 2진법으로 변환을 하려면 10진법의 값을 2로 나누고 나온 몫을 그 다음 다시 2로 나누면서 마지막 몫이 1이 나올 때 까지 2로 나눕니다. 몫이 1이 나오면 마지막 나온 몫을 포함해서 이전에 나왔던 나머지 값을 역으로  자릿수를 채워주면 됩니다.

5. 10진법 -> 8진법으로 계산 방법

위에 4번과 동일한 방법이지만 2가 아니라 8로 나누어 주면 됩니다.

6. 10진법 -> 16진법으로 계산 방법

위에 4번과 동일한 방법이지만 2가 아니라 16으로 나누저 주면 됩니다.

7. 8진법에서 다른 진법 변환 16진법에서 다른 진법으로 변환 계산 방법

  1. 8진법이나 16진법에서 다른 진법으로 변환을 하고 싶으면 위에서 알려드린 4번 방법인 10진법에서 2진법으로 계산하는 방법을 활용해서 값을 2진법으로 변환을 진행을 합니다.
  2. 그 이후에 1~3번에 나오는 2진법을 다른 진법으로 변환하는 방법을 활용하여서 맞는 진법으로 변환을 하시면 됩니다.

예를 들어 8진법 42이가 있는데 16진법으로 변경을 하고 싶다면 자릿수마다 3자리로 끊어서 2진법으로 표현을 하면 앞자리 4는 100이고 뒤에 2는 010 입니다.

합치면 100010이 됩니다. 이 2진법을 16진법으로 변경을 한다면 자릿수를 뒤에서 부터 4자리씩 끊어서 정리를 하면 됩니다.  뒤자리는 0010이고 앞자리는 0010이 됩니다. 이렇게 나눈 값을 16진법에 승수로 표현을 하면 22의 결과 값을 얻을 수 있습니다.

Dolphin

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

7개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

7개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

7개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

8개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

8개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

8개월 ago

This website uses cookies.