진법과 변환

코딩 파인애플·2026년 9월 7일

ETC. 🎸

목록 보기
4/4
post-thumbnail

안녕하십니까 코딩 파인애플입니다
이번 시간에는 진법과 변환에 관해 알아보겠습니다

들어가기 앞서 이 영상을 참고하여 만들었음을 밝힙니다

진법이란? 🤔

진법(Numeral System)이란, 자릿수가 올라가는 기준이 되는 단위이자 숫자를 표기하는 방법입니다

예를 들어 저희가 보편적으로 사용하는 건 10진법인데 9 이상 넘어가면 10이 되는 경우를 10진법이라 합니다

그렇다면 10진법이 아닌 8진법이나 16진법의 경우 각각

7 이상이 되면 10,
15 이상이 되면 10,

즉, 8진법의 경우 0~7 밖에 못쓰거나 16진법의 경우 0~⑨ 및 A~F까지 총 16개의 기호밖에 못씁니다

??? : 않이 ;; 근데 16진법은 15가 넘어가는 순간 10이 되는건데 왜 표기부터 10이 넘어가는대 ;;

그러기에 10진법 이상부터는 영단어 A,B,C 로 표현하는 관례가 있습니다

예를 들어 16진법의 경우 9가 넘어가는 순간 A(10)가 되고 그 다음부터는 B(11)... C(12)... D(13)... E(14)... 최종적으로 F(15) 이상부터는 자리올림이 일어나 10 이 되는 겁니다

그 다음부터는 컴퓨터에서 보편적으로 쓰이는 2진법, 8진법, 16진법에 관해 알아보겠습니다


2진법

2진법(Binary System)은 숫자 0과 1 딱 두 개만 사용하여 모든 수를 표현하는 방식입니다

프로그래밍적으로 표기하면 앞에 '0b(inary)'가 따라옵니다

특히나 2진법은 컴퓨터가 정보를 처리하는데 사용합니다

컴퓨터는 빠르지만 능지가 거진 빡@대가리라🌾🐒 내부적으로 1과 0밖에 인식을 못합니다
(거짓)(참❗❗❗)
그렇기에 이 멍1청한 넘에게 복잡한 세상의 데이터를 가르치려면, 세상의 모든 것을 '있다(1)'와 '없다(0)'라는 이분법으로 번역해야합니다

2진법의 경우

0 1 10 11 100 101 110 111 1000 1001 1010...
0 1  2  3   4   5   6   7    8    9   10...

2진수 ↔️ 10진수

2진수에서 10진수으로 변환하려면 각 자릿수의 위치를 맨 오른쪽부터 0번째, 1번째, 2번째... nn번째라고 했을 때, 1이 있는 위치마다 2n2^n을 계산해 더해줍니다

예를 들어 67을 2진수으로 나타내면
1000011 이 되는데 여기서 각각의 자릿수를 n이라 하였을 때 각 자릿수마다 n-1승을 해주면 계산이 쉽게 됩니다

우선 1로 표기되는 곳들을 계산하면 각각

20+21+26=1+2+642^0 + 2^1 + 2^6 = 1 + 2 + 64

와 같음으로 따라서 67이 되는 겁니다

그렇다면 반대로 10진법을 2진수로 변환하려면 10진수를 2로 나눠 나온 나머지를 이어붙이면 됩니다

예를 들어 67을 2로 계속 나눠보면

67 / 2 = 몫 33 ... 나머지 1
33 / 2 = 몫 16 ... 나머지 1
16 / 2 = 몫  8 ... 나머지 0
 8 / 2 = 몫  4 ... 나머지 0
 4 / 2 = 몫  2 ... 나머지 0
 2 / 2 = 몫  1 ... 나머지 0
 1 / 2 = 몫  0 ... 나머지 1

가 되는데 여기서 나온 나머지 값들을 아래부터 이어붙이면 1000011 이 나오게 됩니다


8진법

8진법(Octal System)은 숫자 0부터 7까지 총 8개의 기호만 사용하며, 8이 되는 순간 자릿수가 올라가는(10) 표기법입니다.

프로그래밍적으로 표기하면 앞에 '0o(ctal)'가 따라옵니다

또한 8진법이 컴퓨터에 쓰이는 까닭은 2진수를 직관적으로 빠르게 변환 가능하며, 사람이 계산하기 간편하기 때문이기에 8진법을 사용합니다

8진법의 경우

0 1 2 3 4 5 6 7 10 11 12...
0 1 2 3 4 5 6 7  8  9 10...

8진수 ↔️ 10진수

8진수에서 10진수으로 변환하려면 8진수의 각 자릿수(가중치)를 곱합니다

예를 들어 67을 8진수로 나타내면 103이 되는데

여기서 각 자릿수(가중치)를 곱하면 :

(1×82)+(0×81)+(3×80)=64+0+3=67(1 \times 8^2) + (0 \times 8^1) + (3 \times 8^0) = 64 + 0 + 3 = 67

이 됩니다

반대로 10진법을 8진수로 변환하려면 10진수를 8로 나눠 나온 나머지를 이어붙이면 됩니다

예를 들어 67을 8로 계속 나눠보면

67 / 8
 8 ... 3
 1 ... 0
 0 ... 1

가 되는데 여기서 나온 나머지 값들을 아래부터 이어붙이면 103 이 나오게 됩니다 오옹 나이스


16진법

16진법(Hexadecimal System)은 숫자 0부터 ⑨까지, 그리고 알파벳 A부터 F까지 총 ⑯개의 기호를 사용하여 수를 표현하는 방식입니다

프로그래밍적으로 표기하면 앞에 '0(He)x'가 따라옵니다

컴퓨터 메모리는 보통 8비트(1바이트) 단위로 데이터를 다루는데 2진수로 8비트를 표현하려면 10110110처럼 길이가 길어져 한눈에 알아보기 힘듭니다

이때 16진수 한 자릿수는 2진수 4자릿수(24=162^4=16)와
일대일 (전투에서는팔레르모를익힌) 로 정확히 대응하기 때문에, 긴 2진 데이터를 획기적으로 줄여서 인간이 보기 편하게 만들어 줍니다

메모리 주소나 RGB 색상 코드 (#FF5733)에 16진수를 쓰는 이유가 바로 이 때문입니다

0 1 2 3 4 5 6 7 8 9  A  B  C  D  E  F  10 11 12...
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  16 17 18...

16진수 ↔️ 10진수

16진수에서 10진수로 변환하려면 각 자릿수에 16의 n-1승(가중치)을 곱하여 더합니다 (알파벳은 해당하는 숫자로 바꿔서 계산합니다)

예를 들어 10진수 67을 16진수로 나타내면 43이 됩니다

43을 다시 10진수로 계산해 보면:

(4×161)+(3×160)=64+3=67(4 \times 16^1) + (3 \times 16^0) = 64 + 3 = 67

반대로 10진법을 16진수로 변환하려면 10진수를 16으로 계속 나눠 나온 나머지를 아래에서부터 이어붙이면 됩니다

67을 16으로 나눠보면

67 / 16
 4 ... 3
 0 ... 4

나온 나머지 값들을 아래부터 이어붙이면 43이 나오게 됩니다


꼼수❓

위에서 언급한 방법 말고도 10진 변환 계산이 쉬워지는 꼼?수 가 있습니다

2진수의 경우 2의 거듭제곱을 매번 계산하지 말고, 오른쪽에 1부터 시작해서 2배씩 (제곱) 뻥튀기되는 숫자를 기억합니다

... 128 64 32 16 8 4 2 1
...   0  1  0  1 1 0 1 1

그리고 10진수로 변환할 때 딱 1이 켜진 위치만 계산합니다

또한 8진수와 16진수의 각각 2의 거듭제곱( 2의 3승 , 2의 4승 )으로 이뤄졌다는 식을 이용해

8진수와 16진수의 매 자릿값들을 3자리, 4자리씩, 2진수로 변환한 뒤 이어붙어 10진수로 변환하는 방법도 있습니다 뭐, 이건 꼼수라기보단 새로운 풀이에 가깝지만...

8진수 > 2진수 > 10진수 :

0o53 에서 각각 5 와 3을 2진수 3자리로 변환
= 101 011
= 0b101011
= 32+8+2+1
= 43

16진수 > 2진수 > 10진수 :

0x2b 에서 각각 2와 b를 2진수 4자리로 변환
= 0010 1011
= 0b(00)101011
= 32+8+2+1
= 43

소수점 아래의 자릿값

소수점이 포함된 진수 변환 역시 정수부와 원리는 똑같습니다

다만 자릿값이 오른쪽으로 갈수록 제곱이 아닌 나눗셈으로 작아질 뿐입니다

또한 위에서 언급했던 3 , 4 자리씩 푸는 법 또한 성립됩니다

핵심 원리는 소수점 아래의 자릿값소수점을 기준으로 오른쪽으로 한 칸씩 갈 때마다 각 진수의 밑수만큼 나누는데 예를 들어

2진수의 경우 2의 -1승은 1/2와 같으므로 0.5...로 계산하고

8진수의 경우 8의 -1승은 1/8과 같고

16진수의 경우 16의 -1승은 1/16과 같습니다

8진수를 0.54를 예시로 계산하면

  • 5→1015 \rightarrow \mathbf{101}
  • 4→1004 \rightarrow \mathbf{100}

0.101100(2)0.101100_{(2)}

=(1×0.5)+(0×0.25)+(1×0.125)+(1×0.0625)=0.5+0.125+0.0625=0.6875(10)\begin{aligned} &= (1 \times 0.5) + (0 \times 0.25) + (1 \times 0.125) + (1 \times 0.0625) \\ &= 0.5 + 0.125 + 0.0625 \\ &= \mathbf{0.6875_{(10)}} \end{aligned}

결과적으로 8진수 0.54(8)0.54_{(8)}은 10진수로 0.6875(10)0.6875_{(10)}가 됩니다




이상으로 글을 마치도록 하겠습니다 감사합니다.

... 해피 ⑨ 데이~
profile
풍성한 한가위 보내시길 바랍니다.

0개의 댓글