관리 메뉴

IT 쟁이

진법 변환에 대해서 본문

C/C++/API/MFC

진법 변환에 대해서

클라인STR 2018. 10. 7. 20:57

우선- 진법의 구조와x진수->10진수로 변환하는 법입니다.

  우리가 일상생활에서 사용하는 수는 10진법을 사용한다. 10진법은 0부터 9까지의 10개의 숫자를 사용하여 수를

  나타낸다.

  자연수 523은 100이 5개, 10이 2개, 1이 3개인 수를 합한 것이며 다음과 같이 표현할 수 있다.

① 10진법 

     523.4 = (5 × 100) + (2 × 10) + (3 × 1) + (4 × 0.1) 

             = (5 × 102)+ (2 × 101) + (3 × 100) + (4 × 10-1)  

                         |              |               |                |  

                        +--------------------------------------- 가중값  

 

  각 진법에서 기호에 사용되는 숫자의 수를 밑수(base)라고 하며, 10진법에서의 밑수는 10이 된다. 또한 모든 수는 소숫점을 기준으로 각 자리에 대하여 오른쪽부터 왼쪽으로 밑수를 거듭제곱한 크기의 가중값을 가지며, 소숫점을 기준으로 왼쪽에서 오른쪽으로는 거듭제곱의 역수를 가중값으로 가진다. 이러한 체계는 모든 진법의 수에서 공통적이므로 적용되므로 2진법, 8진법, 16진법도 같은 방법으로 계산할 수 있다.

② 2진법(Binary)

  모든 진법에서 밑수는 0부터 시작한다. 진법의 수는 밑수가 2개이므로 0과 1이 2진수의 밑수이다. 즉 2진수는 0과 1로만 이루어진 수가 된다. 각 자리의 수는 오른쪽에서 왼쪽으로 2의 거듭 제곱의 가중값을 갖는다. 컴퓨터에서 기억 용량의 최소 단위를 비트(bit)라고 하며, 한 자리의 2진수를 표현할 수 있는 기억 용량이다.

4자리의 2진수, 즉 4비트의 2진수 1011은 다음 전개식과 같이 나타낼 수 있다.

     (1 0 1 1)2= (1 × 23)+ (0 × 22) + (1 × 21) + (1 × 20)  

                   = 8 + 0 + 2 + 1  

                   = (11)10 

 

③ 8진법(Octal)

  8진법의 수는 0부터 7까지의 8개의 숫자로 표현하는 수로써 밑수는 8이다. 2진수의 수로 어떤 값을 표현하려면 자릿수가 많이 필요하게 되며 이해하기도 어려워진다. 따라서 2진수의 값을 좀 더 간단하게 표현하기 위해 8진법을 사용한다.

  8진수 2진수 3자리의 값(23-1값까지)을 한 모둠으로 묶어 한 자릿수로 나타낸다. 8진수 251은 다음 전개식과 같이 나타낼 수 있다.

     (251)8= (2 × 82)+ (5 × 81) + (1 × 80)  

               = 128 + 40 + 1  

               = (169)10 

 

 

④ 16진법(Hexadecimal) 

  16진법은 0부터 9까지의 숫자와 A, B, C, D, E, F 등 16개의 문자를 사용하여 표현하는 수로써 밑수는 16이다. 16진수는 2진수 4자리의 값(24-1값까지)을 한 모둠으로 묶어 한 자릿수로 나타낼 수 있어 2진수로 표현된 값을 간단하게 나타내는데 사용한다.

  16진수 1C3은 다음 전개식과 같이 나타낼 수 있다.

     (1C3)16 

= (1 × 162)+ (12 × 161) + (3 × 160)  

                 = 256 + 192 + 3  

                 = (451)10 

 

10진법

2진법

8진법

16진법

10진법

2진법

8진법

16진법

0

0

0

0

16

10000

20

10

1

1

1

1

17

10001

21

11

2

10

2

2

18

10010

22

12

3

11

3

3

19

10011

23

13

4

100

4

4

20

10100

24

14

5

101

5

5

21

10101

25

15

6

110

6

6

22

10110

26

16

7

111

7

7

23

10111

27

17

8

1000

10

8

24

11000

30

18

9

1001

11

9

25

11001

31

19

10

1010

12

A

26

11010

32

1A

11

1011

13

B

27

11011

33

1B

12

1100

14

C

28

11100

34

1C

13

1101

15

D

29

11101

35

1D

14

1110

16

E

30

11110

36

1E

15

1111

17

F

31

11111

37

1F

표 Ⅲ-1 각 진법에서의 수의 표현

10진수-> x진수로 변환하는 법

★10진수를 2진법으로 변환

         o. 10진수를 밑 수인 2로 나누어서 몫과 나머지를 분리해서 표기.

         o. 몫이 완전히 나누어 질 때까지 이 과정을 반복한다.

         o. 몫이 완전히 나누어진 후 나머지를 발생된 순서대로 오른쪽에서

             왼쪽으로 정렬해 표기하면 2진수가 된다.

     2 )   25

               2 )   12  -----> 1

               2 )    6  -----> 0

                 2 )    3  -----> 0      (25)10= (11001)2

               2 )    1  -----> 1

                      0  -----> 1

★10진수 682를 8진수로 바꾸는 방법

              8 )    682

              8 )     85   ----> 2

                 8 )     10   ----> 5      (682)10= (1252)8

              8 )      1   ----> 2

                       0   ----> 1

★10진수를 16진수로 바꿀 때는 10진수를 16으로 나눗셈하여 완전히

        나눗셈이 계산된 후 각 관계의 나머지를 정렬한다.

        10진수 1839를 16진수로 바꾸는 방법

             16 )   1839

             16 )    114  -----> F

               16 )      7  -----> 2    <-----> (1839)10 = (72F)16

                       0  -----> 7 

◆기타...

    8진 숫자와 2진수와의 관계

8진수

0

1

2

3

4

5

6

7

대응되는 2진수

000

001

010

011

100

101

110

111

16진수는 2진수 네 자리와 같음.

        2진수가 여러 자리로 연속될 때 오른쪽에서부터 네 자리씩 묶어서

        16진수 한 자리로 표현.

             1 0 1 1   1 0 1 0   1 1 0 0   0 0 1 0   =  (BAC2)16

              ---------  ----------  ---------  ---------

                B         A         C         2

★소수 진법 변환입니다.

소수 부분의 변환 방법 : 소수 부분을 변환하고자 하는 진수의 밑수로 0이 될 때까지 계속 곱하여 자리 올림수가 발생되는 순서대로 표시하면 된다.


(0.625)10

=(0.101)2

(0.625)10

=(0.A)16

자리올림수       소수

0.625×2=1.   │       250

0.250×2=0.   │       500

0.500×2=1.   ↓        000 

0.625×16=10. ↓       000

 

★2진수에서 8진수, 16진수로 변환

(가) 2진수에서 8진수로 변환 : 소수점을 중심으로 왼쪽과 오른쪽으로 각각 세 자리씩 묶어서 각 묶음에 대응되는 8진수의 한 자리로        표시.

(나) 2진수에서 16진수로 변환 : 소수점을 중심으로 왼쪽과 오른쪽으로 각각 네 자리씩 묶어서 각 묶음에 대응되는 16진수의 한 자리로        표시.


(01101100.001101)2

=(154.15)8

(01101100.001101)2

=(6C.34)16

2진수 : 001 101 100 . 001 101 2진수 : 0110 1100 . 0011 0100

8진수 : 1 5 4 . 1 5

16진수 : 6 C . 3 4

 

★8진수, 16진수에서 2진수로 변환  

(가) 8진수의 2진수 변환 : 소수점을 중심으로 8진수의 한 자리를 2진수의 세 자리로 표시  

(나) 16진수의 2진수 변환 : 소수점을 중심으로 16진수의 한 자리를 2진수의 네 자리로 표시  


(6B9.CA)16

=(011010111001.11001010)2

16진수 : 6 B 9 . C A

2진수 : 0110 1011 1001 . 1100 1010

 


Comments