Part2, ASCII코드, 2진수와 10진수 16진수

컴퓨터가 이해하는 컴퓨터 언어 어떻게 만들어질까?

by 구본재

저번 PART1에 이어서 이번 시간에는 코딩에 대해서 공부하던 도중 기초적인 지식에 대한 의문이 들어서 좀 더 파고 들어보았습니다. 솔직히 저는 진성 개발자가 아니라... 많은 검색과 유사 코드를 찾아서 개발하는 응용만 할 수 있습니다. 그래서인지 기초적인 지식이 부족하고 이해도가 많이 부족한 느낌이 있었죠


이번에 네이버 검색 도중에 발견한 인터넷 강의 http://www.edwith.org/ 를 계기로 차근차근 코딩에 대해서 배워나가고 있습니다.


첫 시간에는 하드웨어의 기초에 대해서 배웠고 컴퓨터에 조금이나마 관심이 있으면 다들 알법한 내용이라 스윽~ 훓어보고 지나갔습니다.

// 내용은 기억장치에 관해서 입니다. 우리 컴퓨터는 기억장치를 통해서 우리가 작성하는 언어와 컴퓨터 언어를 본인만의 해석을 진행하고, 실행하는 역할을 가지고 있습니다. 특히 OS, 그 안의 프로그램 등은 컴퓨터가 이해할 수 있는 코딩을 진행하고 이를 우리의 언어로 변환시켜 우리 눈에 보여주는 것 입니다.


그럼 컴퓨터의 계산은 어떻게 이루어지나?


일단 컴퓨터에는 크게 CPU와 RAM 그리고 HDD 로 이루어져있다고 보시면 됩니다.


그리고 속도는 CPU RAM HDD 순으로 빠르죠!

ASCII.png

http://www.edwith.org/connect_cs/lecture/11349/

CPU 캐시, 하드디스크, RAM


CPU는 용량이 매우 큰 파일이나 데이터를 처리해야 하지만, 한번에 32 또는 64bit의 블록 단위로 굉장히 적은 양의 데이터를 조작하고 계산합니다. 하지만 중앙처리장치는 이러한 비트들을 굉장히 빠른 속도로 처리할 수 있습니다.


이와 정 반대로 하드디스크는 CPU보다 훨씬 많은 양의 데이터를 저장할 수 있습니다. 근래의 하드디스크는 기기바이트나 테라바이트 단위의 데이터를 저장할 수 있습니다. 하드디스크는 엄청나게 많은 양의 데이터를 기억장치에 저장할 수는 있지만, 데이터를 읽고 쓰는 데에 많은 시간이 소요됩니다.


이 중간에 있는 것이 임의 접근 기억장치, 즉 RAM입니다. RAM은 하드디스크보다 훨씬 빠르게 데이터를 읽고 쓸 수 있어서, 실행중인 프로그램이나 열려있는 파일들이 더 빨리 접근될 수 있도록 메모리를 저장하는 데에 쓰입니다.



최근 우리가 사용하는 OS의 경우에는


ASCII-1.png


이처럼 많은 개발로 인하여 우리가 사용하는 컴퓨터가 다양한 작업을 수행할 수 있고 고사양의 게임 및 프로그램을 실행할 수 있습니다.


그럼 여기서 질문이 하나 생기죠
컴퓨터는 어떻게 작업을 처리하는거지?


http://tvcast.naver.com/v/742299


간단하고 쉽게 설명된 컴퓨터의 작업 방식 입니다.


요즘 언어로 알고리즘이라고 하죠


여기서 질문을 비트와 바이트로 나타내어 처리할 수 있는 양을 표현합니다.



http://www.edwith.org/connect_cs/lecture/11347/

하나의 비트는 0과 1, 이 두 가지의 값만 저장할 수 있습니다. 컴퓨터 내부에서 물리적 표현될 때는, 켜고 끌 수 있는 스위치라고 생각할 수 있겠습니다. (켜기=1, 끄기=0)

하지만 비트 한 개는 많은 양의 데이터를 나타내기에 턱없이 부족합니다. 그렇기 때문에 여러 숫자 조합을 컴퓨터에 나타내기 위해 비트열을 사용합니다. 바이트(byte)여덟 개의 비트가 모여 만들어진 것입니다. 하나의 바이트에 여덟 개의 비트가 있고, 비트 하나는 0과 1로 표현될 수 있기 때문에 2^8 = 256 개의 서로 다른 바이트가 존재할 수 있습니다.

바이트가 모이면 더 큰 단위가 될 수 있습니다. 킬로바이트는 1,000 바이트, 메가바이트는 1,000 킬로바이트(100만 바이트), 기가바이트는 1,000 메가바이트(10억 바이트)입니다. 테라바이트는 1,000 기가바이트(1조 바이트)이며, 심지어 페타바이트와 엑사바이트와 같은 더 큰 단위도 존재합니다.




그래서 ASCII 코드가 뭔가요?


컴퓨터는 비트로 작업을 처리하는데 비트는 0과 1로 이루어져 있습니다.

ASCII-2.png

그럼 우리가 사용하는 이런 텍스트들을 표현하기에는 무리가 있지 않을까요?


ASCII-3.png

http://www.edwith.org/connect_cs/lecture/11351/

기본 ASCII 코드 표는 7비트만 이용해서 모든 문자들을 나타냅니다. 이것은 ASCII 코드로 2^727 개, 즉 128개의 문자를 나타낼 수 있다는 것을 의미합니다. 확장 ASCII8번째 비트를 추가하여 총 256개의 문자를 나타낼 수 있도록 합니다. 소문자와 대문자 통틀어 52개 알파벳 밖에 없으므로, 그 외 남는 공간에 구분 기호, 숫자, 몇몇 기본 심볼들($나 % 기호 등) 같은 다른 종류의 문자들을 나타낼 수 있습니다.


하지만 8비트 ASCII 코드로도 나타낼 수 없는 문자들이 아직도 많이 있습니다. 우리가 사용할 수 있는 문자들의 개수는 256개보다 많기 때문이다. 예를 들어, 수학 기호들과 영어 외 다른 언어의 글자들은 표준 ASCII 표에 들어가기 힘듭니다. 이 때문에 훨씬 더 많은 문자들을 포함할 수 있는 유니코드(Unicode)이 생기게 됐습니다. 예를 들어, 유니코드는 100만개 이상의 문자들을 나타낼 수 있는 문자 인코딩 표준입니다. 유니코드의 첫 128개의 문자는 ASCII의 128개의 문자와 동일하므로 서로 호환이 됩니다.


ASCII-.png



요렇게


표현되는 표를 보면 쉽게 이해할 수 있습니다.


우리가 H 를 사용하면 16진수로 48을 불러오고 10진수로 72를 불러오고 이를 2진수로 변환하여 컴퓨터가 이해하는 식입니다.


미리 정의해놓은 코드대로 컴퓨터는 본인만의 언어로 순환하여 이해하고 있고


우리가 이렇게 프로그램을 개발하고 채팅 서핑 등을 할 수 있는 것입니다.








컴퓨터 공부는 흥미가 없다면 재미없는 것이 사실이다.


솔직히 하드웨어 공부 말고는 ... 나도 재미가 없어서.. 대충 이런게 있구나 하고 넘어갔지만


이번에는 좀 더 쉽게 이해하려고 하다보니 아~~ 이거구나 로 마무리하게되었다.


좀 더 코딩 공부를 하며 브런치에 게시해보도록 하겠다!!!!!

매거진의 이전글Part1. 액션 러닝 (Action Learning)