- 숫자의 위치에 따라 가중치가 달라지는 수로 나타내는 방법을 진법이라 하며 그 수를 진수라 한다.
- X진수 : X진수는 한자리 위의 값이 X배가 된다.
- 컴퓨터는 주로 2진법, 8진법, 16진법을 주로 사용한다.
1. 10112 (2진법), 5678 (8진법), A116 (16진법) - 우측 아래첨자로 진수를 표시한다.
2. 각 자리의 숫자에 가중치를 곱해서 더하면 10진수가 된다.
ㄱ. 10112 = 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8 + 2 + 1 = 1110
ㄴ. 5678 = 5*8^2 + 6*8^1 + 7*8^0 = 320 + 48 + 7 = 37510
ㄷ. A116 = 10(=A)*16^1 + 1*16^0 = 160 + 1 = 16110
- 진수변환
1. X진수의 10진수로의 변환
352.67 = 3*7^2 + 5*7^1 + 2*7^0 + 6*7^-1 (소수점 이하는 -n승이 된다)
= 147 + 35 + 2 + 6/7 = 184.85710
2. 10진수의 X진수로의 변환
ㄱ. 37.687510를 2진수로 변환
a. 먼저 10진수를 정수부(37)와 소수부(.6875)로 나눈다.
b. 정수부 37은 2로 계속 나누어 나머지의 역순을 나열한다.(2 미만이 될 때까지)
37/2 --- 몫 : 18, 나머지 : 1
18/2 --- 몫 : 9, 나머지 : 0
9/2 --- 몫 : 4, 나머지 : 1
4/2 --- 몫 : 2, 나머지 : 0
2/2 --- 몫 : 1, 나머지 : 0
1/2 --- 몫 : 0, 나머지 : 1 (나머지의 역순을 나열)
================
따라서, 정수부는 100101 이다.
c. 소수부는 2를 곱햇 나온 수의 소수점 윗자리를 구하고 다시 소수점 윗자리를 0으로 만든 뒤 2를 곱한다. 이 과정을 계속 반복한다.(소수점 자릿수까지 반복)
0.6875 * 2 = 1.3750 --- 윗자리 : 1 (1.3750은 소수점 윗자리가 1이므로 0으로 만든 뒤 2를 곱해준다.)
0.3750 * 2 = 0.7500 --- 윗자리 : 0
0.7500 * 2 = 1.5000 --- 윗자리 : 1
0.5000 * 2 = 1.0000 --- 윗자리 : 1 (차례대로 나열)
======================
따라서, 소수부는 0.1011 이다.
d. 37.687510 = 100101.10112 이다.
ㄴ. 524.7610을 16진수로 변환
a. 먼저 10진수를 정수부(524)와 소수부(.76)으로 나눈다.
b. 정수부 524를 16으로 나누어 나머지의 역순을 나열한다.
524/16 --- 몫 : 32, 나머지 : C(=12)
32/16 --- 몫 : 2, 나머지 : 0
2/16 --- 몫 : 0, 나머지 : 2
=================
따라서, 정수부는 20C 이다.
c. 소수부는 16을 곱해서 나온 수의 소수점 윗자리를 구하고 다시 소수점 윗자리를 0으로 만든 뒤 16을 곱한다. 이 과정을 계속 반복한다.(소수점 자릿수까지 반복)
0.76 * 16 = 12.16 --- 윗자리 : C(=12)
0.16 * 16 = 2.56 --- 윗자리 : 2
0.56 * 16 = 8.96 --- 윗자리 : 8
====================
따라서, 소수부는 C28 이다.
d. 524.7610 = 20C.C2816 이다.
ㄷ. 참고 : c 과정을 반복할 수록 10진수 소수부의 값과 유사해 진다.
3. 2진수의 2^n진수로의 변환
ㄱ. 2진수를 4진수로 변환
a. 2진수 2비트는 4진수의 한 자리와 대응된다. 소수점을 기준으로 2비트씩 묶어 각 묶음을 4진수로 바꾼다. (2비트씩 묶은 후 남는 비트도 0이 있다고 생각하고 묶어주자)
2진수(10110.111012) |
01 |
01 |
10 |
. |
11 |
10 | 10 |
4진수 |
1 |
1 |
2 |
. |
3 |
2 | 2 |
b. 10110.111012 = 112.3224 이다.
ㄴ. 2진수를 8진수로 변환
a. 2진수 3비트는 8진수의 한 자리와 대응된다. 소수점을 기준으로 3비트씩 묶어 각 묶음을 8진수로 바꾼다.
2진수(10110.111012) | 010 | 110 | . | 111 | 010 | ||
8진수 | 2 | 6 | . | 7 | 2 |
b. 10110.111012 = 26.728 이다.
4. 2^n진수의 2진수로의 변환
ㄱ. 4진수를 2진수로 변환
a. 4진수는 각 자리를 2비트 2진수로 변환한다.
4진수(112.3224) | 1 | 1 | 2 | . | 3 | 2 | 2 |
2진수 | 01 | 01 | 10 | . | 11 | 10 | 10 |
b. 112.3224 = 10110.111012 이다.
ㄱ. 8진수를 2진수로 변환
a. 8진수는 각 자리를 3비트 2진수로 변환한다.
8진수(26.728) | 2 | 6 | . | 7 | 2 | ||
2진수 | 010 | 110 | . | 111 | 010 |
b. 26.728 = 10110.111012 이다.
ㄱ. 16진수를 2진수로 변환
a. 16진수는 각 자리를 4비트 2진수로 변환한다.
16진수(A1.616) | A | 1 | . | 6 | |||
2진수 | 1010 | 0001 | . | 0110 |
b. A1.616 = 10100001.0112 이다.
5. X진수를 P진수로 변환
- 현재까진 10진수를 제외한 X진수를 P진수로 바로 변환하는 방법은 알려져있지 않다.
- X진수를 10진수로 변환 후 P진수로 변환해야 한다.
ㄱ. 2진수를 7진수로 변환
a. 2진수 1011101을 10진수로 변환한다.
10111012 = 1*2^6 + 0*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 64 + 16 + 8 + 4 + 1 = 9410
b. 10진수 93을 7진수로 변환한다.
93/7 --- 몫 : 13, 나머지 : 2
13/7 --- 몫 : 1, 나머지 : 6
1/7 --- 몫 : 0, 나머지 : 1
=================
따라서, 1627
c. 10111012 = 1627 이다.
* 출처 : 초보 프로그래머가 꼭 알아야 할 컴퓨터 동작 원리, 김종훈 저자
'기타' 카테고리의 다른 글
크롬 개발자도구란? (0) | 2017.11.19 |
---|---|
컴파일과 빌드 차이점 (8) | 2017.09.03 |