본문 바로가기

C Programming

진법 변환

진법 변환의 필요성


프로그래머가 편하게 내부데이터를 표현하기 위함

(컴퓨터는 2진수를 이용하고 사람은 10진수를 편리하게 사용함) 



기수법


로마식 기수법(Ⅰ,Ⅱ, Ⅲ, ...)

중국식 기수법(一, 二, 三, ...)

인도식 기수법(1, 2, 3, ...)

현재 널리 사용되는 기수법은 인도식 기수법



진법과 진수


진법은 기수법에서 각 자리수의 범위가 몇인지를 나타내는 단위


2진법 : 0,1로 수를 표현

8진법 : 0~7로 수를 표현

10진법 : 0~9로 수를 표현

16진법 : 0~9,A,B,C,D,E,F 16자리로 수를 표현


진법 표시

1(2), 1(8), 1(10), 1(16)... "(xx)" 괄호 안에 있는 숫자가 진법



진법 변환


진법 변환은 기존에 표현 되던 진법의 진수를 다른 진법의 진수로 바꾸는 방법



2진수의 진법 변환


2진수 -> 10진수


ex) 1001(2) -> 9(10)


2진수 -> 8진수

2진수 -> 10진수 -> 8진수


2진수 -> 16진수

2진수 -> 10진수 -> 16진수



8진수의 진법 변환


8진수 -> 2진수

8진수 -> 10진수 -> 2진수


8진수 -> 10진수

8진수 -> 10진수


8진수 -> 16진수

8진수 -> 10진수 -> 16진수


10진수의 진법 변환


10진수 -> 2진수

ex) 9(10) -> 1001(2)


실수의 진법 변환


정수부와 실수부를 나누어 따로 구한다.


ex) 13.3(10) -> 1101.010011001100110011... (2)

(1) 정수부분 13의 경우

일반적인 10진수 -> 2진수 변환법을 이용함

13(10) -> 1101(2)


(2) 실수부분 0.3의 경우

2를 곱하여 1.0 보다 작을 경우 "0", 1.0보다 클 경우 "1"을 구해 순환하는 값을 찾는다.



16진수의 진법 변환


16진수에서 10진수나 2진수로 변환시에는 아래 표를 참고하여 변환을 한다.

ex) 5A(16) -> 0101 1010(2)

A : 1010

5 : 0101


ex) 5A(16) -> 90(10)

A : 10 * 16^0 = 10

5 : 5 * 16^1 = 80

10 + 80 = 90