함께 만드는 별빛 세상, 천문노트 · Since 2001

[AstroDev의 C언어 강좌] 컴퓨터 데이터 표현 방식에 대한 이해

유환용 2009-06-28 (일) 20:20 11184
목록
이전글 다음글

웹 아카이브(2018-06-21 기록)에서 복원한 글입니다.



들어가기 전에…

 

프로그래밍 공부를 하기 전에 이것부터 알고 넘어가자 물론 지금 당장 마스터를 해야만 프로그래밍을 할 수 있는 것도 아니며 프로그래밍 공부를 하는 도중에 공부를 해도 상관은 없다. 지금 당장 이해가 안 간다면 이런 것이 있구나라는 식으로 읽고 넘어가자

컴퓨터 데이터 표현 방법


우리는 정보 즉 일종에 데이터를 어떻기 표현하며 인식을 하는가? 기계식으로 표현을 하자면 눈과 귀, 코, 피부 등으로 다양한 데이터를 감지한 다음 입과 손, 몸으로 다양하게 표현하지 않는가? 특히 손으로 다양한 도구를 이용하여 그에 맞는 데이터를 표현한다. 그럼 컴퓨터는 어떻게 데이터를 표현을 할까?

컴퓨터는 불행하게도 모든 데이터의 표현 및 연산을 2진수로 처리하게 된다. 소리, 그림 모든 것을 2진수로 표현하게 되는 것이다. 그럼 2진수란 무엇일까? 그밖에 8진수와 10진수, 16진수란 무엇일까? 이번 장에서는 각 기수법마다 표현 방법을 이해를 하고 컴퓨터 안에서 어떻게 표현이 되며 각 기수법 변환을 간단하게 익힐 것이다.

2진수? 8진수? 16진수?


컴퓨터가 사용하는 기수법인 2진수를 설명하기 전에 10진수에 대해서 간단하게 서술하겠다. 우리가 사용하는 10진수는 숫자의 한 지리를 0 부터 9 까지 총 10가지의 숫자로 표현하게 된다. 즉 10가지의 숫자로 표현하기 때문에 10진수이라고 하는 것이다. 그렇다면 2진수와 8진수, 16진수들은 각각 2가지의 숫자, 8가지의 숫자, 16가지의 숫자를 이용해서 표현을 한다는 것일까? 답은 그렇다 이다. 10진수체계에서 10이상의 표현을 올림 수를 더 하듯이 2진수에서는 2이상, 8진수에서는 8이상, 16진수에서는 f이후(왜 16이 아닌 f인지는 16진수에 대해서 설명할 때 같이 하겠다.)일 때 올림 수로 표현하게 된다.

 

2진수

10진수

0

0

1

1

10

2

11

3


2
진수에 따른 올림 수

위에 삽입된 표를 보면 2진수 체계를 볼 수가 있다. 2진수는 2이상의 숫자를 표현 하려면 올림 수를 더하여 표현을 해야 한다. 그렇다면 8진수는 8이상의 숫자를 표현 할 수가 없어서 7이후로는 올림 수를 더해야 한다는 것을 자연스럽게 이해할 수가 있을 것이다. 그렇다면 16진수는 왜 16이 아니라 f 이후에 올림 수를 더하는 것일까? 이유는 간단하다. 우리 인간은 숫자라는 기호를 10가지밖에 만들지 않아서 9이상의 표현은 알파벳으로 대신하게 되었다. 아래 표를 보면 좀더 이해가 쉬울 것이다.

 

16진수

10진수

0

0

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

a

10

b

11

c

12

d

13

e

14

f

15

16진수와 10진수

 

각 기수법에 따른 표현방식을 알아보았다. 그렇다면 이 글을 읽는 여러분은 이런 생각을 할 수 있을 것이다. 컴퓨터는 분명 2진수로만 데이터를 표현을 한다고 하였다. 그런데 왜 8진수와 16진수를 더불어 알아야 하는 것일까?라는 의문을 가질 수 있을 것인데 이는 가독성을 높이기 위해서라고 말할 수가 있다. 2진수로 모든 것을 표현하게 된다면 한자리로 표현 가능한 숫자도 불필요하게 많은 자릿수를 소비하게 되며 자리수가 많아질수록 읽기가 불편해서 작업하는데 영향을 미칠 수가 있다. 그래서 변환이 쉬운 8진수와 16진수를 이용하게 되는 것이다.

 

컴퓨터 데이터 단위

 

비트(bit)와 바이트(byte)라는 단위를 들어 본적이 있는가? 컴퓨터를 사용하는 사람이라면 한번쯤은 들어본 단어들이다. 컴퓨터를 구입할 시에도 32비트(bit), 64비트(bit)라는 문구를 보았을 것이고, 모니터 해상도를 바꿀 때도 해상도 조절 바 옆에 색이라는 곳에서 비트(bit)를 조절하는 선택메뉴를 볼 수 있을 것이다.이처럼 컴퓨터를 사용하면서 비트(bit)라는 단위를 많이 접하게 되는데 이 비트(bit)라는 것은 무엇일까? 비트(bit)라는 것은 컴퓨터가 표현하는 가장 작은 단위이다. 비트(bit)는 0과 1로 이루어져 있다. 바이트(byte)라는 것은 8개의 비트(bit)를 하나의 단위로 표현한 것이다. 즉 비트(bit)와 바이트(byte)는 다음과 같은 관계를 가지게 된다.

 

8 Bit == 1 Byte

 

컴퓨터 메모리로 표현을 하면 다음과 같다.

 

1바이트


4비트

 

 

 

 

 

 


1비트

0

0

0

0

0

1

1

0

 

지금까지 기수법과 컴퓨터 데이터 표현 방식에 대해서 알아보았다. 마지막으로 프로그래밍 할 때 8진수와 16진수를 어떻게 표현하는지를 알아보고 이 글을 끝내도록 하겠다. 참고로 지금까지 정수를 기준으로만 설명을 해왔다. 음수와 실수는 약간 다른 방식으로 표현이 되는데 이는 나중에 기회가 될 때 설명을 하겠다.

 

8진수, 16진수 표현

 

이 글은 내가 C언어 강좌를 시작하기 전 필요하다고 생각하는 기본적인 지식을 알리기 위해서 따로 작성하게 되었다. 물론 당장은 몰라도 프로그래밍은 가능하지만 이번 기회가 아니면 나중에 작성할 기회가 없어서 간단하게나마 이 글을 작성하게 되었다. 글 작성 동기에 따라 지금부터 보여줄 예제 소스는 C언어 기반으로 작성할 것이다. C언어를 모르는 사람이더라도 사용방법 정도는 이해 할 수 있을 것이다.

 

우리가 프로그래밍 시에 변수 안에 숫자 데이터를 할당하게 되는데 흔히 사용하는 10진수를 이용하여 데이터를 할당한다. 기수법에 따른 데이터 표현 방법을 보자

 

int val0 = 15;     //10진수 숫자 데이터 15 할당

int val1 = 017;    //8진수 숫자 데이터 17 할당

int val2 = 0xf     //16진수 숫자 데이터 f 할당

 

위 소스를 보면 모르는 문자 또는 기호가 하나씩 있다. 각 변수마다 숫자가 다르지만 모두 10진수로 변환을 해보면 모두 같은 수라는 것을 알 수 있다. 그럼 각 숫자마다 붙은 기호는 무엇을 뜻하는 것일까? 기호들은 숫자의 기수법을 정의한다. 수를 입력하는 프로그래머가 일일이 다 각 기수법을 기억하고 인지한다 하더라도 컴퓨터는 이 수가 10진수인지 16진수인지 구별 할 수 없는 것은 당연하기에 앞에 구별 할 수 있도록 기호를 만들어 붙였다. 8진수는 숫자 앞에 ‘0’(영어 대문자 O가 아닌 숫자 0)을 붙이고 16진수는 8진수 기호 뒤이어 x 즉 0x를 붙여서 사용하면 된다.

[이 게시물은 최고관리자님에 의해 2012-12-20 11:00:41 프로그래밍 강좌에서 이동 됨]

댓글 0

로그인하면 댓글을 쓸 수 있습니다.

천문 프로그래밍 게시판

총 147건
글쓰기