진법이란 무엇일까?

진법이란?

진법을 수학이나 프로그래밍을 기초부터 배우실 때 이야기를 들어 보셨죠? 저는 수학을 할 때 들었던 기억보다 프로그래밍을 처음 공부를 시작하면서 공부하게 된 것 같습니다.

수학을 좋아하지 않다 보니 진법을 공부하면서 많이 어려워했던 기억이 있습니다.

컴퓨터는 0과 1로만 모든 것을 표현한다고 하는 말은 들어 보셨을 겁니다.  사람의 진법과 컴퓨터의 진법이 다르다 보니 어려움을 느끼시겠지만 이 글을 읽음으로써 진법에 대한 이해와 컴퓨터의 원리를 이해를 하실 수 있습니다.

컴퓨터를 이해하고 사람들과 어떻게 다르며 사람이 사용하는 진법과 컴퓨터가 사용하는 진법의 변환을 잘 할 수 있습니다. 또한 진법에 대한 기본적인 개념도 역사적으로 알아볼 수 있습니다.

진법의 개념

진법은 수를 표기하기 위한 기수법으로 임의 숫자를 사용하여 수를 표현하는 방법입니다. 여기서 진법이라고 불리는 이유는 수를 셀 때 숫자의 값이 계속 올라가다가 자릿수가 바뀌는 그 시점의 값을 기준으로 사람들이 사용하는 10진수의 형태로 진법을 표현하게 됩니다. 또는 진법을 통해 나타낼 수 있는 수의 개수가 진수가 됩니다. 그렇기 때문에 진수와 진법은 같이 움직입니다.

위의 글에서 10진수라고 했는데 왜 사람은 10진수라는 체계를 오랜 세월에 걸쳐서 사용하고 현재까지도 사용하고 있습니다. 그러면 왜 10진수, 10진법을 사용하게 된 건가요? 그것은 사람의 손가락이 10개였기 때문에 오랜 시대를 걸쳐서 10진수를 사용하고 지금까지도 사용하고 있습니다. 참고로 10진수는 수의 기준으로 본다면 그렇게 효율적인 진수와 진법은 아닙니다.

그럼 10진수를 세부적으로 왜 10진수, 10진법이라고 하는지 설명을 하겠습니다.

사람이 사용하는 10진수를 한 자리로만 표현을 할 수 있는 수는 0~9까지입니다. 9에서 1이 더해지면 자릿수가 바뀌게 됩니다. 바로 10이 됩니다. 그래서 사람이 지금까지도 사용하는 수가 10진법인 겁니다. 10진수는 수의 개수이기 때문에 0부터 9까지 세어보면 10개가 나옵니다. 그러므로 10진수라고 합니다.

※ 참고  https://smart.science.go.kr/scienceSubject/maths/view.action?menuCd=DOM_000000101001006000&subject_sid=313

컴퓨터의 진법

컴퓨터의 진법은 2진법을 사용합니다. 2진법은 0, 1 이후에 사람이 사용하는 10진수에서 2가 되려고 할 때 자릿수가 바뀌어서 2진법이라고 합니다. 당연히 진수로도 2진수입니다. 0과 1이기 때문에 수가 2개이기 때문입니다.

여기서 궁금한 점이 있으실 수 있습니다. 왜? 컴퓨터는 2진수일까요? 이 부분은 현재 이런 문명이 만들어준 초석인 전기를 생각하시면 됩니다. 전기 같은 경우 ON OFF 이렇게 2개를 사용할 수 있기 때문에 이걸 컴퓨터에서도 당연히 전기로 움직이는 기계이기 때문에 ON OFF인 2개의 수를 가지는 2진수가 나오게 된 것입니다.

컴퓨터에서 처음에는 2진법을 통해서 컴퓨터에 명령을 내리거나 데이터를 저장하고 하였습니다.  여기서 한번 더 궁굼증이 생길 수 있습니다. 3 이상의 값을 컴퓨터가 어떻게 사용이 가능하지? 지금 사용하는 컴퓨터를 보면 숫자를 기본이고 문자열 까지도 표현을 하지? 바로 정답은 자릿수마다 승수의 값을 가지게 하여서 아무리 큰 값이라도 표현하고 사용을 할 수 가 있습니다. 

현재 사용되고 있는 진법의 종류

우선 한 가지를 기본적으로 알고 있어야 합니다. 진법은 무한하게 만들 수 있습니다. 예를 들면 38진법이라던지 127진법 등과 같이 누구나 마음먹으면 진법을 만들 수 있습니다. 하지만 현재 세상에서 통용되고 사용되는 진법은 4가지가 있습니다. 이전부터 이야기한 사람들이 사용하는 10진법과 컴퓨터가 사용하는 2진법 그리고 컴퓨터에서 파생되어서 사용이 되는 8진법과 16진법입니다. 

8진법은 0~7까지 숫자로 표현되고 8이 되는 순간 10이 됩니다. 16진법은 0~9까지는 그대로 사용되고 10은 A 11은 B 12는 C 13은 D 14는 E 15는 F이고 16을 나타내려면 자릿수가 올라가서 10이 됩니다.

※ 아래의 표를 한번 더 확인해주세요.

Dolphin

Recent Posts

Java 총정리[97. Java GUI]

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

7개월 ago

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

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

8개월 ago

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

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

8개월 ago

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

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

9개월 ago

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

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

9개월 ago

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

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

9개월 ago

This website uses cookies.