Type 에 대해서 설명하기에 앞서 먼저 bit와 byte 에 대해서 설명하도록 하겠다.

1. Bit
bit란, 0,1 로 표현되는 숫자를 말한다. 즉, 2진수(binary)로 나타냈을 때의 한자리(digit)이다.

bit 를 표기할때는 임의로 |0| 이렇게 표기하도록 하며, 이뜻은 1bit 를 의미한다.

8bit 는 |00000000| 이런식으로 표기가 되겠다.

1bit 로는 2가지 상태를 나타낼수 있다. (|0| 또는 |1|)

2bit 로는 4가지 상태를 나타낼수 있다.(|00|, |01|, |10|, |11|)

3bit 로는 몇가지? 답은 8가지 이다.

계산 하는 방법은
n 일때 만들수 있는 가지수는
2n 가지가 되겠다.

x86 이라는 얘기를 한번쯤은 들어봤을 것이다. 그리고 x86은 32bit 라는 말도 들어봤을것이다.

32bit 라면, |0000 0000 0000 0000 0000 0000 0000 0000| 를 나타낼수 있다는 것이다.

cpu 를 한번쯤이라도 본사람이면 cpu 에 핀이 많이 달려있는것을 볼수 있다. 그 핀 하나가 각 한 bit 를 가진다고 보면
32bit cpu 는 한번에 처리할수 있는것이 32bit 란 말이 된다.

2. Byte
byte 는 bit 가 8개 모인것이다. 즉, |00000000| 은 1byte 이다.
1byte 로 나타낼수 있는 가지수는 256가지이다. (28)
10진수로 나타내보면 0 ~255 가 될것이다.

그러면 32bit는 4byte 가 된다.

KiloByte 는 210byte 가 되고
MegaByte 는  210 Kilobyte 이런식으로 나타낸다.

그럼 32bit 로 나타낼수 있는 메모리는 각 메모리당 1byte 씩 저장한다고 하면, 232 = 4GigaByte 가 된다.

그러므로 32bit OS 에서 인식할수 있는 최대 메모리는 4GB 가 된다.

3. Hexadecimal
Hexadecimal 은 16진수이다.
0~9, A~F 16개를 가지고 수를 표현한다.
F 는 10진수로 15를 나타낸다.

2진수를 10진수로 16진수로 변환하는 설명은 생략하도록 한다.

16진수하나는 몇 비트가 필요할까?   정답은 4bit 이다. (0~15 는 16가지 이고 16가지를 나타낼려면 4bit 가 필요하다.)
4bit 를 다른말로 Nibble 이라고 한다. 16진수 한자리가 1 Nibble 이 된다.

1byte 는 2자리의 16진수로 이루어져 있다. 그래서 보통 0xFF 혹은 0xff 로 표기한다.

그래서 메모리 주소를 표기할때 0xbfffffa0 이런식으로 4byte 로 나타낸다.(32bit OS 에서 메모리는 4byte 이므로)

데이터가 저장될때는 바로 2진수로 표기가 된다.
이 저장된 데이터를 hex 코드로 보게 되면 aa ff bf 이런식으로 볼수 있게 된다.

이 데이터가 저장될때 영문자는 ascii code 형식으로 저장이 된다.(1byte 소모)
한글은 2byte code 나 utf8 형식으로 저장이 될것이다.

여기까지 알수 있다면

이제 다음에 설명할 Type 과 bit 연산에 대해서 별 어려움 없이 이해하리라 본다.




앞에서, Hello, World 를 출력하는 프로그램을 짜보았다.

이제 한줄 한줄 분석을 해보겠다.

Tutorial 이므로 간단하게 설명하도록 하겠다.

#include <stdio.h> 문장은 Standard IO 와 관련된 함수를 사용할 수 있게 해준다.
여기서는 printf 함수를 사용하기 위해 적었다. 당분간은 printf 를 사용하기 위해 이 문장을 사용한다고 생각해 하면 된다.

int main() 문장은 프로그램의 시작을 나타내는 함수이다.

C에서는 다양한 함수들이 존재하는데(i.e.. printf 함수)
그 중에서 프로그램을 실행시키면 젤 먼저 시작점을 알아야 되는데 이것이 main 함수이다.

즉, 모든 프로그램은 main 함수가 존재한다.

함수는 brace "{", " }" 안에 정의된다.

printf 는 괄호안의 " " 안의 문장을 화면에 출력해 주는 함수이다. 문장의 끝은 세미콜론 ';' 로 끝나야 한다.

printf 만으로 간단하게 화면에 출력해주는 프로그램을 만들수 있다.

마지막 return 문장은 함수가 종료될때 반환해주는 값이다. 나중에 차츰차츰 설명하도록 하겠다.

1. 설치
인터넷에서 MinGWStudioFullSetup-2.05.exe 파일을 다운받아서 설치한다.

구글에서 mingw developer studio 를 치면 다운받을수 있는곳이 나온다.

2. 실행
실행시킨후 [File]-[New] 를 선택한후 원하는 프로젝트를 선택한다.
콘솔에서 간단하게 Hello, World 를 찍을 것이므로, Win32 Console Application 을 선택한다.


왼쪽 View 에서 [Source Files] 위에서 마우스 우클릭을 한다음, [Add Source Files To Project] 를 선택한다.
원하는 파일명을 입력한뒤 열기 버튼을 누른다. 파일이 없어도 상관없다.
그다음 source files 에 등록된 파일을 더블클릭하면 새로만들겠냐는 메세지가 나오고 확인을 누르면 새로운 파일이 생성된다. 참고로 파일명은 *.c 로 하는것이 좋다. ( C 언어로 작성할 예정이므로)

창에 다음과 같이 입력한다.
코드에 대한 설명은 다음에 하기로 한다.

위와 같이 입력한후,
[ctrl]+[F5] 를 누르거나 , 느낌표 모양의 아이콘을 누른다.
소스코드에 아무런 에러가 없다면 콘솔창이 실행되면서 Hello, World 를 출력할 것이다.


Reference
Brian W.Kernighan., and Dennis M.Ritchie. "The C Programming Language, 2nd edition", Prentice Hall

들어가기 전에
내용은 위의 참고서적을 기반으로 하고 있다.
The C Programming Language 를 TCPL 로 줄여서 표기하도록 한다.

프로그래밍을 처음 접해보는 사람을 상대로 설명하는 글을 쓸 예정이다.
그렇다고 기초만 하는것이 아니라 TCPL 에 들어있는 모든 내용을 설명할 예정이다.

개발 환경
Windows XP, MinGWStudio 환경에서 설명할 것이다.
하지만, 내용은 TCPL 을 따르며 실행환경만 이것으로 한다.

Programming Language?

프로그래밍 언어란 쉽게 말해 컴퓨터가 실행할수 있는 언어 (혹은 프로그램)를 만드는 언어 (혹은 도구)라고 할 수 있겠다.

High-Level Language 가 있고 Low-Level Language 로 나눌수 있는데,

High-Level Language 는 인간이 알아보기 쉬운 언어이고,
Low-Level Language 는 컴퓨터가 알아보기 쉬운 언어이다.

C Programming Language 는 High-Level Language 에 속한다.
한마디로, C 언어는 인간이 알아보기 쉬운 언어이다. 하지만, 막상 해보면 인간이 이해하는것도 그렇게 만만하지가 않다는 것을 느낄수 있다.

Compiler?

컴파일러란, High-Level Language 로 짜여진 소스(source) 를 컴퓨터(기계)의 언어(실행파일)로 바꿔주는 도구이다.
이것은 OS 에 종속적이다.
소스(source) 는 OS 에 독립적이지만(완전히 독립적인 것은 아님) 컴파일러는 OS 에 따라 달라진다.
내가 설명하고자 하는것은 C Language(C 언어) 이고 이것을 컴파일 해주는 Compiler 는 GCC 가 되는 것이다.
MinGWStudio 는 소스와 컴파일을 쉽게 해주는 도구이다.

나중에 다시 설명하겠지만, printf("Hello, World"); 란 문장을 Compiler 가 번역하면
OS에 종속적인 실행파일이 만들어진다.
C Language 는 printf 의 기능만 명시되어 있을뿐 컴파일러가 어떻게 동작해야 된다고는 나와있지 않다.
때문에 printf 가 어떻게 동작하는지에 대해서는 알 필요가 없지만, 나중에 컴파일러를 만들고 싶다면 알아야 할 것이다.

주저리 주저리...

본인이 처음 프로그래밍을 접한것은 초등학교때이다.(286AT DOS 시절)
그당시 내가 좋아하는 게임이 하고 싶어서 게임을 만들어 볼 생각에 일단 게임만드는 책을 샀었다.
그 책에는 상당히 어려운 것들이 막 적혀져 있었는데, 예제 소스라고 나와져 있던것들을 어디에 적어야 하는지도 몰랐었다.
내가 읽을수 있는 말이라곤 표지에 적혀져 있는  'C언어를 이용한' 이란 말이었다.
그래서 C언어를 공부해볼꺼라고 PC통신 에서 C언어 강좌를 봤었다.
거기도 역시 이렇다할 설명없이 그냥 소스코드를 치고 ctrl+F5 인가 하면 실행이 된다는 얘기뿐이었다.

그래서 그당시 컴퓨터에 깔려있는 HWP 2.1 에 코드를 치고 저장을 .hwp 말고 .exe 로 하고 실행해 보기도 하였다.
그리고 그렇게 프로그래밍이란 말만 들어보고 접게 되었다.(책에 있는걸 해볼수 없으니)
그러다가 중3때 다시 인연이 되었는지 컴퓨터에 관심을 가지게 되었고, 리눅스란 놈을 시작해보다가
고등학교때 '안녕하세요 터보C' 란 책으로 입문하게 되었다.

컴퓨터 관련 책을 보면서 드는 생각인데, 입문자들은 언제나 불편하다. 책에 나와있는 환경과 조금이라도 틀리면 해볼수 없기 때문이다. 그렇다고 책에 자세히 나와있는 것도 아니다.

이 문제는 책을 쓰는 저자도 마찬가지 일것이다. 모든 환경을 고려하다보면 도입부분만 해도 엄청 방대해 질것이기 때문이다.
한가지 더,
책에서 사용되는 프로그램은 대부분 상용프로그램들이다.
독자들은 겨우 데모버전 가지고 실행해 보는것이 전부이다.
그래서 Free software 버전인 GCC, MinGWStudio 를 선택하였다.

+ Recent posts