천문 프로그래밍과 관련된 이야기를 나눌 수 있는 곳입니다.
총 게시물 144건, 최근 0 건
   
[AstroDev의 C언어 강좌] 컴퓨터 데이터 표현 방식에 대한 이해
글쓴이 : 유환용 별님  (121.♡.17.92) 날짜 : 2009-06-28 (일) 20:20 조회 : 9977


들어가기 전에

 

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

컴퓨터 데이터 표현 방법


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

컴퓨터는 불행하게도 모든 데이터의 표현 및 연산을 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 프로그래밍 강좌에서 이동 됨]

   

총 게시물 144건, 최근 0 건
번호 제목 글쓴이 날짜 조회 추천
144  음양력 변환 프로그램 CalTime 3.4 +1 김동빈별님 11-24 7236 0
143  현재 시간에 따른 태양, 달 위치 계산. +1 조재훈별님 08-30 6496 0
142  [DreamSpark] Microsoft의 정품 프로그램을 무료로 … +6 백승우별님 01-21 8364 0
141  일식 예측을 위한 태양과 달의 위치 계산 +1 이형철별님 11-21 10828 0
140  사이토구니치의 古天文學 번역판을 공개하며 +1 이형철별님 08-22 11239 2
139  [AstroDev의 C언어 강좌] 나왔다 Hello World!!! +3 유환용별님 07-01 8683 0
138  [AstroDev의 C언어 강좌] 컴퓨터 데이터 표현 방… 유환용별님 06-28 9978 0
137  IAU2000 장동 모델 +2 김창환별님 06-25 11859 0
136  [AstroDev의 C언어 강좌]메모리 안에서는 무슨일… +10 유환용별님 06-10 12033 0
135  [AstroDev의 C언어 강좌]우리는 무엇을 준비해야… +7 유환용별님 06-08 9945 0
134  [AstroDev의 C언어 강좌]우리는 무엇을 준비해야… +3 유환용별님 06-07 9509 0
133  [AstroDev의 C언어 강좌]C언어를 공부하기 전에 … +4 유환용별님 06-06 10096 0
132  IAU2006 세차 모델 +1 김창환별님 05-18 10664 0
131  각도변환문제 : 도(degree), 시(hour), 라디안(radia 지용호별님 04-15 18138 0
130  지구의 세차운동(歲差運動, Precession) 계산하… +5 지용호별님 04-14 14570 0
 1  2  3  4  5  6  7  8  9  10  맨끝
 
Since 2001.2.7 미래창조과학부 등록 비영리민간단체 천문노트. Copyright All rights reserved.
단체명 : 천문노트  |    고유번호 : 101-82-15888  |    대표자명 : 김태욱, 조우성  |    주소 : 138-804 서울특별시 송파구 가락동 93 금강빌딩 7층 710호  |    전화 : 02-543-3295  |    Fax : 02-6918-6888  |    통신판매신고번호 : 종로 제01-5696호  |    개인정보관리책임자 및 사이트관리자 : 지용호