티스토리 뷰
진법(Base)
진법은 수(digit)를 표현하는 데 사용되는 기수 체계이다. (기수는 한 자리에서 나타낼 수 있는 수의 개수를 의미한다.) 진법은 숫자 시스템에서 사용되는 기본적인 체계이며, 숫자의 개수와 숫자들 간의 관계를 결정한다. 일반적으로 10진법, 2진법, 8진법, 16진법 등이 널리 사용된다. 즉, 단위 숫자를 몇개를 사용할 건지를 일컫는 말이다.
진수(Number)
진수는 특정 진법에서 사용되는 숫자이다. 각 진법은 특정한 숫자 집합을 가지고 있는데, 이것을 진수라고 한다. 예를 들어, 10진법에서는 0부터 9까지의 10개 숫자의 집합을 사용하고, 2진법에서는 0과 1 두 개의 숫자를 사용한다.
아래는 여러가지 진법들의 수를 표현한 것이다.
10진수로 변환하기
10진법(Decimal)은 일상적으로 사용하는 숫자 체계로, 0부터 9까지의 숫자를 사용하여 수를 표현하는 진법이다.
▶ 숫자 1024를 10진법을 사용해서 10진수로 표현해보자.
우선 숫자 1024를 한 자리씩 끊어서 봐야한다. 오른쪽 끝부터 자리가 0번이 주어져서 제일 오른쪽은 10^0 이다. 오른쪽에서 왼쪽으로 갈 수록 자리수가 1씩 상승하며, 10^0, 10^1, 10^2... 이렇게 승수가 증가한다.
각 자리수를 10의 승수를 계산해서 모두 더하면 아래처럼 나타낼 수 있다.
= (1 * 10^3) + (0 * 10^2) + (2 * 10^1) + (4 * 10^0)
= 1000 + 0 + 20 + 4
= 1024
최종적으로 1024를 10진수로 계산하면 1024가 된다.
10진수를 계산한 것처럼 2진수, 8진수, 16진수도 똑같이 적용된다.
2진수 → 10진수
2진법(Binary)은 0과 1 두 개의 숫자만을 사용하여 수를 표현하는 진법이다. 컴퓨터 시스템에서는 전기 신호의 ON과 OFF 상태를 나타내는데 사용되며, 2진수들의 조합으로 모든 데이터를 표현할 수 있다.
▶ 2진수 1011을 10진수로 변환해보자.
숫자 1011을 한 자리씩 끊어서 봐야한다. 위의 10진수 계산과 똑같이 적용한다.
오른쪽 끝부터 자리가 0번이 주어져서 제일 오른쪽은 2^0 이다. 왼쪽으로 갈 수록 자리수가 1씩 상승하며, 2^0, 2^1, 2^2... 승수가 증가한다.
각 자리수를 2의 승수를 계산해서 모두 더하면 아래처럼 나타낼 수 있다.
= (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0)
= 8 + 0 + 2 + 1
= 11
최종적으로 2진수 1011을 10진수로 계산하면 11이 된다.
8진수 → 10진수
8진법(Octal)은 0부터 7까지 총 8개의 숫자를 사용하여 수를 표현하는 진법이다. 한 자리에는 0부터 7까지의 숫자가 올 수 있다. 컴퓨터의 기계어나 UNIX/LINUX 시스템에서는 퍼미션(permission, 권한) 등을 표현하는데 주로 사용된다.
▶ 8진수 1702를 10진수로 변환해보자.
숫자 1702를 한 자리씩 끊어서 봐야한다.
오른쪽 끝부터 자리가 0번이 주어져서 제일 오른쪽은 8^0 이다. 왼쪽으로 갈 수록 자리수가 1씩 상승하며, 8^0, 8^1, 8^2... 승수가 증가한다.
각 자리수를 8의 승수를 계산해서 모두 더하면 아래처럼 나타낼 수 있다.
= (1 * 8^3) + (7 * 8^2) + (0 * 8^1) + (2 * 8^0)
= 512 + 448 + 0 + 3
= 963
최종적으로 8진수 1702를 10진수로 계산하면 963이 된다.
16진수 → 10진수
16진법(Hexadecimal)은 0부터 9까지의 숫자와 A부터 F까지의 6개의 알파벳 문자를 사용하여 수를 표현하는 진법이다. A는 10을, B는 11을, C는 12를, D는 13을, E는 14를, F는 15를 나타낸다. 주로 컴퓨터 메모리 주소나 색상 값 등을 표현하는데 사용된다.
▶ 16진수 1A4를 10진수로 변환해보자.
숫자 1A4를 한 자리씩 끊어서 봐야한다.
오른쪽 끝부터 자리가 0번이 주어져서 제일 오른쪽은 16^0 이다. 왼쪽으로 갈 수록 자리수가 1씩 상승하며, 16^0, 16^1, 16^2... 승수가 증가한다.
각 자리수를 16의 승수를 계산해서 모두 더하면 아래처럼 나타낼 수 있다. 16진수 A는 10진수로 바꾸면 10이다.
= (1 * 16^2) + (A * 16^1) + (4 * 16^0)
= (1 * 16^2) + (10 * 16^1) + (4 * 16^0)
= 256 + 160 + 4
= 420
최종적으로 16진수 1A4를 10진수로 계산하면 420이 된다.
10진수를 다른 진수로 변환하기
여러 진수들을 10진수로 변환해봤으니, 반대로 10진수를 다양한 진수로 변환해보자.
10진수를 다른 진수로 변환하는 방법은 몫이 0이 될 때까지 특정 숫자로 계속 나누는 것이다.
변환한 뒤, 변환한 숫자 뒤에 어떤 진법이 사용됐는지 써줘야한다.
예로 들면, 2진수 1011을 표현할 때는 1011(2)로 써줘야한다.
10진수 → 2진수
▶ 10진수 191을 2진수로 변환해보자.
10진수를 몫이 0이 될 때까지 2로 계속 나누자
2로 계속 나누면 아래 표와 같이 몫인 0과 나머지들이 남는다.
이때 몫 0의 다음부터 위로 순서대로 써주면 2진수로 변환할 수 있다.
최종적으로 10진수 191을 2진수로 계산하면 10111111(2)이 된다.
10진수 → 8진수
▶ 10진수 191을 8진수로 변환해보자.
10진수를 몫이 0이 될 때까지 8로 계속 나누자
8로 계속 나누면 아래 표와 같이 몫인 0과 나머지들이 남는다.
이때 몫 0의 다음부터 위로 순서대로 써주면 8진수로 변환할 수 있다.
최종적으로 10진수 88을 8진수로 계산하면 277(8)이 된다.
10진수 → 16진수
▶ 10진수 191을 16진수로 변환해보자.
위와 같은 방법으로 191을 16으로 계속 나눠서 구해도 되지만 가장 빠르게 구하는 방법을 소개한다.
10진수를 가장 빠르게 16진수로 변환하는 방법은 8진수로 먼저 바꾼 다음 2진수로 바꾸고, 그 다음 16진수로 변환하는 것이다.
10진수 -> 8진수 -> 2진수 -> 16진수
여기서 비트의 개념이 필요하다. 비트는 0과 1로 구성된 컴퓨터에서 데이터를 처리하는 가장 작은 단위이다.
비트가 3개가 있을때, 0과 1 두 개를 사용해서 나타낼 수 있는 모든 경우의 수는 2^3 = 8이다. 즉, 8진수를 나타내는 데 3개의 자릿수가 필요하다는 뜻이다. 따라서 8진수로 변환할 때는 자릿수를 3개씩 끊어서 계산해야한다.
비트가 4개가 있을때, 0과 1 두 개를 사용해서 나타낼 수 있는 모든 경우의 수는 2^4 = 16이다. 즉, 16진수를 나타내는 데 4개의 자릿수가 필요하다는 뜻이 된다. 따라서 16진수로 변환할 때는 자릿수를 4개씩 끊어서 계산해야한다.
① 8진수 변환
10진수 191을 16진수로 변환하기 위해 먼저 8진수로 변환해보자. 191을 8로 계속 나눠서 8진수로 변환하면 277(8)이 된다.
② 2진수 변환
277(8)을 2진수로 변환해보자. 8진수를 2진수로 변환할 때는 각 하나의 숫자들을 3자리의 0과 1로 표현해야 한다.
2를 0과 1을 사용해 3자리로 변환하면 010이고, 7을 0과 1을 사용해 3자리로 변환하면 111이고, 마찬가지로 7은 111이다.
즉, 최종적으로 2진수로 변환하면 10111111(2)이다.
맨 앞자리에 0이 있으면 생략할 수 있다.
277(8)
2 = 010(2) / 7 = 111(2) / 7 = 111(2)
= 010111111
= 10111111
③ 16진수 변환
그 다음, 2진수 10111111을 16진수로 변환하기 위해서는 숫자를 4자리씩 끊어서 변환해야 한다.
10111111(2)를 4자리씩 끊으면, 1011과 1111로 나눌 수 있다. 1011을 10진수로 변환하면 11이고, 1111을 10진수로 변환하면 15이다.
11을 16진수로 바꾸면 B이고, 15를 16진수로 바꾸면 F이다.
즉, 최종적으로 191을 16진수로 변환하면 BF가 된다.
10111111(2)
1011 = 11(10) / 1111 = 15(10)
11 = B / 15 = F
= BF
2진수 → 8진수, 16진수
2진수를 8진수로 바꾸려면 자릿수를 3개씩 끊어서 계산한다.
2진수를 16진수로 바꾸려면 자릿수를 4개씩 끊어서 계산한다.
진법 변환은 수의 표현을 넓히고 다양한 상황에서 유용하게 숫자를 사용하기 위한 중요한 작업이다.
각 숫자를 진법 변환을 하기 위해서는 해당 진법에서 사용되는 숫자 및 기호를 이해하는 것이 중요하다.
'Basic > ComputerScience' 카테고리의 다른 글
[운영체제] 운영체제 구조, 커널(kernel), 셸(shell), 시스템 콜(system call) (0) | 2023.06.10 |
---|---|
[운영체제] 운영체제(OS)란? (0) | 2023.06.10 |
가장 낮은 비트(LSB), 가장 높은 비트(MSB), 부호 비트(Sign Bit) (0) | 2023.06.06 |
컴퓨터 과학에서 비트(bit)란? (0) | 2023.06.06 |
하드웨어와 소프트웨어의 차이 (0) | 2023.06.05 |