반응형

[다시 쓰는 8051 따라하기] 10진수, 2진수, 16진수
+------------------------------------------------------+
게시장소 : 다음 tinyrobo
작성자 : Timy(me^^;)
작성일 : 2004.10.28
문의 : 다음카페 tinyrobo 혹은 블로그 http://electoy.cafe24.com/blog
+------------------------------------------------------+
[시작]

## 10진수, 2진수, 16진수

갑자기 마이크로프로세서를 말하다가 2진수, 16진수를 언급하니 이해가 안가는 사람도 있을게다.
하지만 이걸 잘 모르면 앞으로 계속 뭘해도 이해하지 못하고 넘어갈 수 밖에 없다.
컴퓨터는 기본적으로 두가지 밖에 모른다. 그건 전기가 흐른다와 흐르지 않는다이다.

디지탈이라는 것이 참 융통성이 없다. 그런점에서는 말이다. 적당한 것이 없다. 전기가 흐르든지 말든지 둘중에 하나를 선택해야만 한다. 전기가 흐르면 약속하기를 1이라는 신호가 온 것으로 하자. 또 전기가 흐르지 않으면 그때는 신호가 0이 된 것으로 하자는 약속을 한다. 그래서 이제부터 모든 8051과 인접한 부분의 선들에 전기가 흐르면(5V -> 0V), 그때는 1이고, 전기가 흐르지 않으면 그때는 0인 것으로 하자.

8051은 기본적으로 0과 1밖에 모른다. 이걸 가지고 우리는 또 우려먹어야 한다. ^^
그러니까 일정한 시간동안 A 라는 핀에 1이라는 신호가 왔다(그러니까 5V 가 연결되었다는 얘기다). 그리고 일정시간이 지난 다음에 0 이라는 신호가 되었다(흘렀던 전기가 끊어졌다는 소리다). 또 일정시간이 지난 다음에 1이 되었다. 그리고 일정시간이 지나고 다시 1인 상태로 가만있었다.

이걸 정리하면 1011 이 된다. 정해진 시간동안 주어진 신호들로 우리는 우리가 원하는 신호를 줄수 있는 것이다. 그러니까 디지탈은 1과 0밖에 못쓰기는 하지만 그렇다고 0과 1이라는 두개중에 하나만 선택하는 것은 아니다.

1111 을 선택할수도 있고, 0000을 선택할 수도  있고, 그 가운데 있는 1100을 선택할수도 있다는 말이다.

8051에는 포트가 4개가 있고, 각 포트는 8개의 핀을 가지고 있다. 그러니까 각각의 핀에 0과 1이 들어올수 있고, 또 나갈수도 있으니까 한번에 4 * 8 = 32 개의 0과 1로 뭉쳐진 정보를 가지고 올수도, 밖으로 내보낼수도 있다는 말이다. (정확하게는 아니다. 아는 사람은 그냥 조용히 넘어가주세요 ^^;)

어쨌거나 0과 1로 이루어진 여러개의 신호를 볼수 있어야 하고, 이걸 사용할수 있어야 하는데 그 여러개의 0과 1을 그대로 쓰기는 너무 번거롭다.

0000110100110010 : 이게 무슨 소린인지 알겠는가? 외울수 있는가? 옆에 있는 사람에게 알려줄수 있는가? 아니면 내일 다시 프로그램을 볼때 이 신호를 다시 쓸수 있겠는가? 어려울게다. 그래서 이 0과 1로 된 수를 다른 단위로 바꾸는 방법을 생각하게 된다.

이진수로 16개가 주욱~ 늘어놓은 것을 보면서 이걸 하나의 수로 기억을 하자는 거다. 그리고 이걸 10진법이나 아니면 16진법을 이용해서 조금 외우기 편하게, 사용하기 간단하게 바꿔보자는 게다.

그런데 10진수로 이걸 바꾸려면 계산기가 있어야 한다. 맨 아래쪽(오른쪽 끝) 0은 2의 0승이다. 그 옆은 2의 1승이고, 한칸씩 외쪽으로 이동할때마다 2의 1승씩 커진다. 그러니까..

0*2^16 + 0*2^15 + 0*2^14 + ... 1*2^1 + 0*2^0 = ? 수치는 계산기로 두드리지 않고 암산으로 처리하기에는 조금 부담되는 수치이다.
그러면 이걸 16진수로 바꾸면 어떻게 될까?

16은 2의 4승이다. 16진수는 재미있게도 2진수로 표현된 수열을 4개씩 잘라서 그 4개에 대한 것만 바꿔주고 이어서 붙여주면 끝이다.

그러니까, 0000110100110010 은 0000 1101 0011 0010 이렇게 4개 단위로 생각하고, 맨 앞의 0000 은 0x00 이 된다. 16진수를 쓸때는 10진수와 다른 표기법이라는 것을 알리기 위해 보통 그 앞에 0x 를 붙여서 쓴다. 다른 방법도 있지만 그건 스스로 책을 보다가 나오면 이해하기 바란다. 그 다음 1101 은 10진수로 13이고, 16진수로 0x0D 가 된다. 10진수는 0부터 9까지만 쓰면 되지만, 16진수는 10진수의 10, 11, 12, 13, 14, 15 에 해당하는 기호를 가져야 한다. 그래서 이것들을 각각 A, B, C, D, E, F 로 두고 쓰게 된다.

이렇게해서 0011 은 0x03 이 되고, 0010 은 0x02 가 된다. 이것들을 모두 이어서 붙여주면, 0x0D32 가 된다. 16진수인 0, D, 3, 2 는 각각 위에 나온 이진수의 4개짜리 집합과 딱떨어지는 것이다. 그래서 보통 우리들은 10진수보다는 16진수를 많이 쓴다. 그게 훨씬 편하니까 쓰는게다. 그러니 이진수를 16진수로 바꾸는 것, 반대로 16진수를 보고 그걸 바로 머릿속에서 이진수로 바꿔서 몇번째 신호가 0인지, 1인지를 알아차릴수 있는 것이 중요하다. ^^

+------------------------------------------------------+
[끝]
반응형

+ Recent posts