본문 바로가기
👩🏻‍💻 Computer Science

진법과 진법 변환

by iirin 2023. 1. 2.

진법이란?

진법은 수를 표기하는 기수법의 하나로 임의의 숫자를 사용하여 수를 표현하는 방법이다.

우리는 일상적으로 10진법을 사용하고 있다. 우리에게 주어진 가장 기본적인 수 세기 도구 손가락이 👐 10개라 가장 직관적인 방법이 아닐까?

반면 컴퓨터는 2진법으로 수를 표현한다. 

 

// 2진법 - 10진법
010 (2) == 2 

// 2^3*0 + 2^2*1 + 2^0*0
// 0, 1 한자리씩 == a bit
// 8 bit = 1 byte
  • 프로그래밍에서 많이 사용되는 진법
    1. 2진법
    2. 8진법 : 리눅스나 FTP 등에서 파일/폴더 권한 표현 등
    3. 10진법
    4. 16진법 : 1byte의 크기를 쉽게 표현할 수 있다. 유니코드, 프로그래밍시 변수 주소 값 등

 

🤔 진법을 왜 알아야할까?

진법은 프로그래밍 전반에 걸쳐 사용된다. 프로그래머들이 컴퓨터의 작업, 특히 논리 연산이나 메모리를 이해하는 데 많은 도움을 준다.

 

비트와 비트열

정보를 저장하고 연산을 수행하기 위해 컴퓨터는 비트(bit)라는 측정 단위를 쓴다. 비트는 이진 숫자 'binary digit'의 줄임말로, 그 이름에서 알 수 있듯이 0과 1 두 가지 값만 가질 수 있는 측정 단위이다.

디지털 데이터를 여러 비트들로 나타내며 두 가지 값을 조합하여(비트열) 많은 양의 정보를 저장할 수 있다. 컴퓨터는 비트 연산을 수행함으로써 데이터를 수정한다.

바이트(byte)는 여덟 개의 비트가 모여 만들어진 것이다. 하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1로 표현될 수 있기 때문에 2^8 = 256 개의 서로 다른 바이트가 존재할 수 있다.


진법 변환 방법

가장 직관적으로 진법을 이해하는 방법 - CS50

10진법 ➡️ 2진법

실제 수를 변환해봄으로써 법칙을 도출해보자. 예시로 숫자 55를 2진법으로 변환한다면 어떻게 해야할까?

  1. 55를 2로 나누고 그 결과를 몫 27과 나머지 1을 분리하여 기록한다.
  2. 1에서 계산한 몫을 다시 2로 나눈 후, 몫 13과 나머지 1을 기록한다.
  3. 2에서 계산한 몫을 다시 2로 나눈 후, 몫 6과 나머지 1을 기록한다.
  4. 3에서 계산한 몫을 다시 2로 나눈 후, 몫 3과 나머지 0을 기록한다.
  5. 4에서 계산한 몫을 다시 2로 나눈 후, 몫 1과 나머지 1을 기록한다.
  6. 5에서 계산한 몫 1은 더이상 2로 나눌 수 없으므로 종료한다.
  7. 기록한 마지막 몫과 나머지를 아래에서 위로 읽으면 2진수 변환이 끝난다.

 

2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
    1 1 0 1 1 1

 

위의 규칙을 볼 때 10진법에서 N진법으로 수을 변환하는 방법은 주어진 숫자를 N으로 나누며 더이상 몫이 나오지 않을때까지 나눈 후 마지막 몫과 나머지를 거꾸로 읽으면 된다.

위의 실습을 표현하면 다음과 같다.

55 = 2^5*1 + 2^4*1 + 2^3*0 + 2^2*1 + 2^0*1 = 110111 (2)

 

2진법 ➡️ 16진법

16은 2^4이기 때문에 4자리씩 끊어서 변환해주면 된다.

앞서 활용했던 예시인 110111 (2) 의 경우 다음과 같이 변환할 수 있다.

  1. 2진수를 4자리씩 분할하여 읽는다.
  2. 분할한 각 부분을 10진수로 변환한다.
  3. 16진수 표현법에 따라 각 숫자를 변환한다.
1단계
110111 (2) -> 0011 , 0111

2단계
2^1*1 + 2^0*1 = 3
2^2*1 + 2^1*1 + 2^0*1 = 7

3단계
37 (16)

 

✋ 16진법, 어떻게 표현하지?

일상에서 주로 사용하는 숫자는 0부터 9까지의 표현법밖에 없으므로 16진법 표현이 어색할 수 있다.

0~9까지는 10진수와 동일하게 표현하고, 10부터 15까지는 다음과 같이 영문자로 나타낸다.

A B C D E F
10 11 12 13 14 15

 

특수하게 16진수 앞에는 0x 로 16진수임을 표현한다.

0xAC7