728x90

진법 간 변환

  • 사람이 사용하는 수로 컴퓨터에 데이터를 입력하거나 연산을 요구하면, 컴퓨터는 자신이 사용하는 2진수로 변환하여 처리하며, 데이터가 방대해짐에 따라 8진수16진수로 표현하기도 한다.

진법 간 변환 관계

 

  • 10진수와 2진수어떤 진법으로든 변환이 가능하지만, 8진수와 16진수서로 직접 변환이 불가능하다.
  • 그러므로 8진수를 16진수로, 또는 16진수를 8진수로 변환하기 위해서는 먼저 10진수2진수로 변환한 후에 8진수나 16진수로 변환해야 한다.

 

[1] 10진수 → 2진수 / 8진수 / 16진수

  • 10진 실수2진수, 8진수 또는 16진수로 변환할 때는 정수부소수부를 변환하는 방법이 다르다.

 

정수부 구하기

  • 이 0이 될 때까지 변환하려는 기수로 나누면서 각 단계마다 나오는 나머지를 나열하는 방식으로 구한다.
    • 가장 먼저 얻은 나머지는 변환된 진수의 가장 오른쪽 자리(정수부 최하위 자리)에 위치
    • 가장 나중에 얻은 나머지는 변환된 진수의 가장 왼쪽 자리(정수부 최상위 자리)에 위치

 

소수부 구하기

  • 소수부가 0이 될 때까지 변환하려는 기수로 곱하면서 각 단계마다 나오는 정수부의 값을 나열하는 방식으로 구한다.
    • 가장 먼저 얻은 정숫값은 변환된 진수 표현의 소수점가장 가까운 자리(소수부 최상위 자리)에 위치
    • 가장 나중에 얻은 정수값은 가장 멀리 있는 자리(소수부 최하위 자리)에 위치
  • 소수부0이 되지 않을 때가 있는데, 이때는 똑같은 소수부가 나올 때까지 변환하려는 기수를 곱하면서 각 단계마다 나오는 정수부의 값을 나열한다.

 

정리

이미지 출처 : 별의 블로그

 

예제 1 : $83.125_{10}$ 를 2진수로 변환하기
정수부 소수부

 

예제 2 : $163.875{10}$ 를 ① 2진수, ② 8진수, ③ 16진수로 변환하기

① 10진수 → 2진수

정수부 소수부

 

② 10진수 → 8진수

정수부 소수부
 

 

③ 10진수 → 16진수

정수부 소수부
 

 

[2] 2진수 / 8진수 / 16진수 → 10진수

  • '진법별 표현' 게시글(https://dev-astra.tistory.com/138)에서 살펴본 진법별 표현 방법을 이용하면 2진수, 8진수, 16진수를 10진수로 변환할 수 있다.
    • 2진수, 8진수, 16진수를 각각의 기수자릿수로 표현한 식을 계산하면 10진수로 변환된다.

 

① 2진수 → 10진수

예제 : $110.01_{2}$ 를 10진수로 변환하기

 

$111.01_{2} = 1 × 2^{2} + 1 × 2^{1} + 0 × 2^{0} + 0 × 2^{-1} + 1 × 2^{-2} = 7.25_{10}$

 

② 8진수 → 10진수

예제 : $243.7_{8}$ 를 10진수로 변환하기

 

$243.7_{8} = 2 × 8^{2} + 4 × 8^{1} + 3 × 8^{0} + 7 × 8^{-1} = 163.875_{10}$

 

 

③ 16진수 → 10진수

예제 : $A3.E_{16}$ 를 10진수로 변환하기

 

$A3.E_{16} = A × 16^{1} + 3 × 16^{0} + E × 16^{-1} = 10 × 16^{1} + 3 × 1 + 14 × 16^{-1} = 163.875_{10}$

 

[3] 2진수 ↔ 8진수 / 16진수

  • 2진수를 8진수/16진수로 변환하거나 8진수/16진수를 2진수로 변환하려면 먼저 10진수로 변환한 다음 다른 진수로 변환하는 것이다.
  • 하지만 이보다 더 간단한 방법은 비트(Bit, Binary Digit) 단위로 나누어 변환하는 것이다.
    • 비트(Bit) : 컴퓨터에서 사용하는 가장 작은 정보 표현 단위로, 0 또는 1을 표현할 수 있다.

 

① 8진수 ↔ 2진수

8진수 → 2진수

  • 8진수는 0과 7까지의 숫자로 표현한 수로, 이 범위에서 가장 큰 수인 7을 2진수로 변환하면 $111_{2}$ 로 3비트가 필요하다.
    • 한 자리의 8진수 2진수로 표현하려면 최대 3비트가 필요하다.
    • 그러므로 8진수를 구성하는 각 자리의 숫자를 3비트로 구성된 2진수로 표현하면 8진수를 2진수로 변환할 수 있다.

 

예제 : $123.1_{8}$ 을 2진수로 변환하기

 

2진수 → 8진수

  • 반대로 2진수8진수로 변환할 때는 2진수소수점 기준으로 3비트한 단위로 묶고, 각 단위를 10진수로 표현하여 8진수로 변환한다.

 

예제 : $1010011.001_{2}$, $11100101.0100111101_{2}$ 을 8진수로 변환하기

 

② 16진수 ↔ 2진수

16진수 → 2진수

  • 16진수는 0과 9까지의 수, 그리고 10부터 15까지의 수를 의미하는 `A` 부터 `F` 까지의 영문 대문자를 이용해 표현한 수로, 이 범위에서 가장 큰 수인 15(`F`)를 2진수로 변환하면 $1111_{2}$ 로 4비트가 필요하다.
    • 한 자리의 16진수 2진수로 표현하려면 최대 4비트가 필요하다.
    • 그러므로 16진수를 구성하는 각 자리의 숫자를 4비트로 구성된 2진수로 표현하면 16진수를 2진수로 변환할 수 있다.

 

예제 : $53.2_{16}$ 을 2진수로 변환하기

 

2진수 → 16진수

  • 반대로 2진수 16진수로 변환할 때는 2진수 소수점 기준으로 4비트 한 단위로 묶고, 각 단위를 10진수로 표현하여 16진수로 변환한다.

 

예제 : $1010011.001_{2}$, $1101110001001.0101000111001_{2}$ 을 16진수로 변환하기

 

[4] 8진수 ↔ 16진수

  • 8진수와 16진수 간의 직접적인 변환은 불가능하기 때문에 10진수 또는 2진수로의 변환을 거쳐야 한다.

 

① 8진수 → 2진수 → 16진수

예제 : $123.1_{8}$ 을 16진수로 변환하기

 

② 16진수 → 2진수 → 8진수

예제 : $53.2{16}$ 를 8진수로 변환하기

 

728x90