본문 바로가기

기타

진수 변환 총정리

- 숫자의 위치에 따라 가중치가 달라지는 수로 나타내는 방법을 진법이라 하며 그 수를 진수라 한다.

- 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.761020C.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

b. 10110.111012 = 112.3224 이다.

ㄴ. 2진수를 8진수로 변환

a. 2진수 3비트는 8진수의 한 자리와 대응된다. 소수점을 기준으로 3비트씩 묶어 각 묶음을 8진수로 바꾼다.


2진수(10110.111012)

 010

110 

111 

010 

 8진수

 2

b. 10110.111012 = 26.728 이다.

4. 2^n진수의 2진수로의 변환

ㄱ. 4진수를 2진수로 변환

a. 4진수는 각 자리를 2비트 2진수로 변환한다.

4진수(112.3224)

 1

 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. 101110121627 이다.


* 출처 : 초보 프로그래머가 꼭 알아야 할 컴퓨터 동작 원리, 김종훈 저자

'기타' 카테고리의 다른 글

크롬 개발자도구란?  (0) 2017.11.19
컴파일과 빌드 차이점  (8) 2017.09.03