[CS] 진법

Geon·2022년 10월 2일
0

CS

목록 보기
1/9
post-thumbnail

각 진법의 특징과, 진법 간 변환 방법을 알아보자.

10진법

십진법은 10을 기준점으로 두고, 0부터 9까지 10개의 숫자를 가지고 수를 표현하는 진법이다. 10을 기준점으로 둔다는 말은, 열배마다 자릿수가 하나씩 올라간다는 말이다.

572

= 500 + 70 + 2
= (10^2 x 5) + (10^1 x 7) + (10^0 x 2)

일의 자리부터 자리마다 10의 0제곱 ... 10의 n제곱으로 증가한다.

10진법은 우리가 사는 세상에서 가장 많이 사용되는 진법인데, 우리 주변을 보면 90퍼센트 이상의 숫자는 모두 0~9로 이루어진 10진법임을 확인할 수 있을 것이다. 이렇게 10진법이 인류의 삶에 가장 밀접한 이유는 다름 아닌 사람의 손이 10개이기 때문이었다. 인류의 신체 특징과 유사하단 이유로 우리는 10진법에 상당히 익숙해졌다. 그만큼 편하기도 하지만, 이 10진법은 단점이 있다. 10은 1과 자신을 제외하면 2와 5 단 두 수를 약수로 가지기 때문에 계산의 효율성이 떨어진다. 8진법과 비교했을 때, 2와 4를 약수를 가지는 8진법만 해도 4번 나눌 때 소수점이 나오기 시작하는 반면, 두 번 만에 소수점이 나오기 시작하는 10진법은 고 수준의 공학 등에 적용시키기에 적합하다고 할 수 없다.


2진법

2진법은 0과 1 두개의 수를 사용하여 수를 표현하는 진법이다. 위에서 말했듯 인간의 신체적 특성상 10진법을 주로 사용했다면, 2진법은 기계의 특성상 주로 사용된다. 전자기기의 경우는 꺼진 신호(0), 켜진 신호(1) 두가지 상태로 신호를 주고받기 때문에 2진법은 컴퓨터를 비롯한 기계가 사용하기에 아주 적합하다고 할 수 있다. 특히 컴퓨터의 세계에서 컴퓨터가 표현하고자 하는 데이터가 있을 경우 전압을 올리고, 없을 경우 전압을 내리면서 동작하는데, 이 작업이 2진법의 매커니즘과 상당히 유사하다.

10001101

= (2^7 x 1) + (2^6 x 0) + (2^5 x 0) + (2^4 x 0) + (2^3 x 1) + (2^2 x 1) + (2^1 x 0) + (2^0 x 1)
= 141

가장 오른쪽부터 2의 0제곱 ... 2의 n제곱

이진수 10001101은 2^7 + 0 + 0 + 0 + 2^3 + 2^2 + 0 + 2^0 로 계산하면 되며 10진수로 141이다. 제일 오른쪽, 2의 0제곱에서 왼쪽으로 자릿수를 옮겨 갈수록 2의 1제곱, 2제곱 순으로 계산된다. 이진수는 기계 친화적 표기법이기 때문에 컴퓨터 프로그래밍시 컴퓨터의 메모리에 빠르게 접근할 수 있는 등의 장점이 있지만, 십진수 1을 이진법으로 표현하면 00000001 이다. 이처럼 이진법은 표현이 길어지고 자릿수를 많이 차지하는 것이 단점이다.

16진법

16을 기수로 하는 표현법이다. 0~9까지는 숫자로 표현하고, 그 이후 10~15까지는 알파벳 A~F를 사용하여 표기한다. 16진법을 사용하면 2진법으로의 변환이 용이하고, 무엇보다 2진법은 자릿수가 너무 길어지는 문제점이 있었지만, 16진수의 경우에는 2진수가 4개의 비트 공간을 차지하여 표현하는 값을 단 한자리로 표현할 수 있기 때문에 훨씬 효율적인 사용이 가능하다.

16진수는 10부터 15까지를 알파벳 A~F로 표기한다고 하였는데, 표를 통해 확인해보자. 각각 같은 수를 10진법 / 2진법 / 16진법으로 표기한 내용이다.

A1

=(16^1 x A) + (16^0 x 1)
=(16^1 x 10) + (16^0 x 1) = 161

가장 오른쪽부터 16의 0제곱..16의 n제곱

16의 0제곱이 1개, 16의 1제곱이 A개 있는데, 16진수 A는 10진수로 10에 해당되니 160 + 1 = 161이 되는 것이다.

진수 변환

10진수 → 2진수

10진수를 2로 더 이상 나눌 수 없을 때 까지 나누고, 그 나머지를 역순으로 나열하면 2진수로 변환된다.
232를 2진수로 변환하면 아래와 같다.

= 1110 1000

10진수 → 16진수

10진수를 16으로 더 이상 나눌 수 없을 때 까지 나누고, 그 나머지를 역순으로 나열한다.

14는 16진수로 E로 표기하므로
= E8

2진수 → 10진수

맨 오른쪽 자리부터 왼쪽으로 자리가 이동할수록 2의 0제곱 부터 제곱이 1씩 늘어나는 것은 위에서 설명했기에 알 것이다. 여기서 1이 써져 있는 자릿수를 모두 더하면 10진수가 된다.

2진수 → 16진수

이진수를 네자리씩 한묶음으로 나누고, 그것에서 십진수를 도출한 후 16진수에 맞는 표기로 표시하면 된다.

각 묶음에서 6과 13이 나오고, 이를 16진수로 표기하면 6D

16진수 → 2진수

16진수를 이진수를 바꾸는건 각 16진수의 한자리씩을 이진수로 바꾼뒤 붙이면 된다.

A는 10이므로 10과 5를 각각 이진수로 맞춰주고 둘을 연결하면 된다. 1010 0101

16진수 → 10진수

16진수를 10진수으로 바꾸는건 2진수를 10진수로 바꾸는것과 매우 유사하다. 가장 오른쪽부터 16의 0제곱 , 1제곱, 2제곱… 순서로 자릿수가 정해져 있는데, 이 자릿수에 맞는 16진수의 값과 16의 n제곱을 곱한후 더하면 된다.

(10x16^1) + (5x16^0)
=165가 나온다.

profile
별에 별 지식 저장해놓고 꺼내먹기📚

0개의 댓글