프로그래밍/자료구조. 개론

2진수와 8진수 그리고 16진수의 관계와 변환 방법

K_Coder 2013. 1. 8. 23:49



2진수  8진수 변환

2진수 16진수 변환

8진수 16진수 변환



2진수와 8진수 그리고 16진수의 관계

2진수와 8진수 그리고 16진수의 관계






지금부터 볼 내용은 8진수와 16진수.


진법에 관해서 포스팅한 내용을 꼭 읽고 아래 내용을 읽기 바랍니다.

물론, 자신 있으면 그냥 보셔도 되지만... 이전 내용을 본 것과 그렇지 않은 것은

굉장한 차이가 있을거라 생각 됩니다... ^^;;


진법의 정의, 개념, 변환, 총 정리.




8진수는 0~7을 나타낼 수 있다. 그렇다면 가장 큰 수인 7의 이진수 값은?

 

바로 111 이다. 즉 비트 3개로 표현 할 수 있다. 당연히 7보다 작은 숫자들도 표현 가능하다.

결국 8진수 값은 3개 비트만 있으면 모두 표현 할 수 있다는 의미가 된다.


마찬가지로 16 진수는 0~15를 나타낼 수 있으며 가장 큰수는 15..

이진수로 표현하자면 1111. 즉 4자리가 필요하다.


위의 원리를 이해 한다면 2진수를 8진수 16진수로 바꾸는 것은 간단하다. 

10110101(2) 을 8진수로 바꾼다면?

8진수는 3개 비트만 필요하다고 했단 7 이상은 자리수가 올라가기 때문이다.
그리고 그 앞에 3자리는 또 자리수가 오르고 그래서 3자리씩 잘라서 계산하면 된다는 말이다.

010 110 101  뒤에서 부터 3자리씩 자르고, 앞쪽 부분이 모자라는 경우는 0으로 채우면 된다. 맨 앞인 10 앞에 0으로 채워서 010.
 2     6    5    3자리씩 끊어서 변환 하면 금방이다.  265(8) 가 정답이다.   

16진수는 어떨까? 뒤에서부터 4자리씩 자르면 된다.
1011 0101
 11     5     


8+2+1=11 , 4+1=5 

8 4 2 1 로 만드는 것이며, 9 가 넘어가면? 2 자리를 차지하기 떄문에 헷갈리는 것을 막기 위해 

10 - A, 11 - B, .... 15 - F 이렇게 표현하게 되어 있따.

11은 B 이다. 따라서 정답은 B5(16) 이 된다.

반대도 마찬가지로 B 는 11이니까 이진수로 만들면 1011 , 5는 0101 그래서 10110101 이 나온다.


여기서 키포인트. 그래서 2진수는 공통이다. 
위에서 해봤듯이 15 밑의 숫자는 금방 눈 대중으로도 가능하다. 이를 이용해서 쉽게 변환을 하자.

8진법 -> 16진법, 16진법 -> 8진법.  이런 경우.. 대게 10진법으로 변환 하고 다시 변환한다.


8진법 값이 몇인지 모르니까 10진수로 바꿔서 값을 확인하고 그 값으로 16진수를 만들곤 한다.


간단한 숫자라면 별로 상관이 없다.

하지만 AC8(16) 을 8진수로 변환하면?   (A,C 만 봐도 16진법인건 눈치 채야함.)

A = 10 , C  = 12
10 * 16^2 + 12 * 16^1 + 8 * 16^0  이렇게 계산 하겠는가?

위에서 배웠듯이 간단하게 할 수 있다. 먼저 AC8을 2진으로 바꾸자.

   A     C    8  
1010  1100  1000  => 101011001000 이렇게 나오는데. 이 놈을 8진수 즉 뒤에서 3자리로 자르자.

101  011  001 000
  5    3     1    0    => 5310(8) 으로 나오게 된다. 반대도 마찬가지이다. 2진으로 바꾸어서 자리수 맞추어서 계산.


부가적인 내용.
우리가 쓰는 진법은 10법. 기계(컴퓨터)가 쓰는 진법은 2진법. 


그렇다면. 우리는 왜? 16진법과 8진법을 배우는가. 


이는 엔지니어들 끼리 혹은 컴퓨터가 아닌 사람들 끼리 2진수를 전달하고 이해하는데

어려움을 덜고자 8진법과 16진법을 사용한다고 한다.

간단하고 극단적인 예로 코딩을 하는데 같이 작업하는 사람에게 101011001000  값을 알려줘야 하는 경우.

쭉 읽어서 불러주는 것 보다 16진수로 AC8 이라고 알려주는 것이 전달하고 이해가 쉽다.


물론 변환하는 과정이 번거롭고 힘들지 않겠냐라고 생각 할 수도 있지만,

몇 번 해보면 느낄 것이다. 제일 큰 수가 16이라 굉장히 금방 변환 가능하다.


솔직히 8진법도 동일한 이유라고 들었던거 같긴 한데

확실하지 않고... 맞다고 해도 이해가 되진 않는다; 


지금의 8진법은 16진법을 배우는 전초 과정 정도로만 하고 16진법을 사용한다.
위에서 해봤듯이 2진을 16으로 바꾸는 것은 금방이고 이해하기도 쉽다.

결과적으로 8->16, 16->8 변환하는 방법만 띡 기억하지 말고. 왜 그런건지. 이해를 하자.

남에게 설명할 정도는 안되도 적어도 나는 이해하고 있어야 나중에 방법을 잊어버려도
간단하게 한번만 슥슥 묶어보면 기억이 날 것이다. 방법을 암기 하는 것이 아니라
원리를 이해하고 방법을 추론해 내자는 것이다.