2진수 <-> 8 진수, 16 진수 변환

Posted in SW개발 // Posted at 2023. 9. 27. 08:41
728x90

이 글은 제가 과거에 운영했던 사이트인 http://dotnet.mkexdev.net 의 글을 옮겨온 것입니다.
그 전에 운영했었던 사이트(mkex.pe.kr)은 흔적도 없이 사라 졌습니다. 그속의 글들도 모두...
그래서 이 사이트도 사라지기 전에 옮기고 싶은 글을 조금씩 이 블로그로 이동시키려 합니다.
(원본글) http://dotnet.mkexdev.net/Article/Content.aspx?parentCategoryID=2&categoryID=9&ID=100

---

앞서 10 진수를 기준으로 2,8,16 진수의 변환을 알아 보았습니다.
 
이번에는 2진수를 8진수와 16진수로 변환하는 방법과
8진수,16진수를 2진수로 변환하는 방법을 알아 봅니다.
 
1. 2진수를 16진수로 변환하기.
2진수로 데이터가 저장되는 정보의 최소 단위인 비트가 4개 모이면 16진수 한 자리에 해당됩니다.
즉, 아래와 같이 4비트에 메모리에 저장할 수 있는 최대값은 15 가(16진수 f) 됩니다

  1
  1
  1
  1

(1 * 2의3승) + (1 * 22) + (1 * 21) + (1 * 20) = 15(10진수) = F(16진수)

 

따라서 2진수 4자리는 16진수 한자리에 해당되므로

아래와 같은 2진수를 16진수로 변환 할때는 4자리씩 끊어서 16진수 한자리로 변환하면 됩니다.

11011111 = 1101  1111  =  DF  가 됩니다.

또한 4자리로 끊었을때 자리수가 부족하면 0으로 채워서 계산하면 됩니다.

1101111 = 0110  1111  =  6F 가 됩니다.

그리고 소수점을 포함한 2진수도 마찬가지 개념으로 변환하면 됩니다.

1011.011 = 1011  .  0110  = B.6 가 됩니다.

2. 2진수를 8진수로 변환하기

위의 개념과 완전 동일합니다.

2진수 비트 3개는 8진수 한자에 해당 됩니다.

 

  1
  1
  1

(1 * 22승) + (1 * 21) + (1 * 20) = 7(10진수) = 7(8진수)

 

 

따라서 2진수 3자리는 8진수 한자리에 해당되므로

아래와 같은 2진수를 8진수로 변환 할때는 3자리씩 끊어서 8진수 한자리로 변환하면 됩니다.
100101= 100  101  =  45 가 됩니다.

또한 3자리로 끊었을때 자리수가 부족하면 0으로 채워서 계산하면 됩니다.

10101 = 010  101  =  25 가 됩니다.

그리고 소수점을 포함한 2진수도 마찬가지 개념으로 변환하면 됩니다.
100101.1011 = 100  101  .  101  100  = 45.54 가 됩니다.
 
==================================================================
 
2진수를 8진수,16진수를 변환하는 방법에 대해 위에서 살펴 봤습니다.
그러면 그 역은, 8,16진수를 2진수로 변환하는 방법은 그저 먹기지요??
위 개념을 역으로 하면 될테지요..
별도의 설명이 필요 없겠으나 하나씩만 해 봅니다.
 
1.  16진수를 2진수로 변환하기
위에서 사용한 수를 가지고 해 봅니다.
위에서 2진수를 16진수로 변환할때 아래와 같았습니다.
11011111 = 1101  1111  =  DF
 
16 진수 DF를 2진수로 변환할려면 16진수 한자리는 2진수 4자리에 해당되므로
D F  =  13  15  = 1101   1111  가 됩니다.
 
소수점을 가지는 16진수도 완전히 동일하겠지요.. 예는 생략 합니다.
 
2.  8진수를 2진수로 변환하기
역시 위에서 사용한 수를 가지고 해 봅니다.
위에서 2진수를 8진수로 변환할때 아래와 같았습니다.
100101= 100  101  =  45
 
8진수 45를 2진수로 변환할려면 8진수 한자리는 2진수 3자리에 해당되므로
4 5  = 100  101  가 됩니다.