본문 바로가기

Web Development/CommonSense

[2장] 컴퓨터의 정보 표현

[1장]에서 언급한 '컴퓨터 사이언스'라는 책을 참고해서 설명드리고 있습니다만,

제 블로그 포스팅은 저의 개인적인 공부를 정리요약 하는 목적이 강하기에 제가 목표로하는 방향성에서

주관적 판단하여 중요하다, 이정도만 알면된다 싶으면 그 정도에서 끝내고 넘어갑니다. 참고해주세요.

책의 모든 내용을 다루는 것은 아닙니다.

 

 

그래서 ~ 오늘은 ?

 

 

우리들은 상대방에게 정보를 전달할 때, 문자/숫자 등 다양한 표현들을 합니다 !

그런데 컴퓨터는 전류가 흐르는상태인 1(ON), 전류가 없는 0(OFF) 두가지로 정보를 표현합니다.

흔히 "컴퓨터는 0하고 1밖에 없어".. 하는 말 그 말이 그 말이에요.

그래서 ! 오늘은 컴퓨터는 어떻게 정보를 받아들이는지 컴퓨터의 정보표현방식에 대해 공부해 보도록 합시다!!

 

오늘 내용은 조금 내용이 많고 요약이 어렵내요.. ㅠㅠ

 

 

☞ 본 포스팅은 공부 내용을 바탕으로 정리하는 것입니다. 주관적이며 정확하지 않은 내용이 포함 되어있을 수 있습니다.

☞본 포스팅은 한빛출판사의 '컴퓨터사이언스'책을 공부한 내용을 토대로 요약한 내용입니다.

 

 

1. 수의체계

 

시작하기전에, 우리는 흔히 손가락이 10개라서 10진법의 수를 사용한다고 합니다.

10진법은 1~10까지 총 10개의 숫자를 이용한다는 것이구요.

그런데 옛날에 살았던 수메르인은 60진법을 사용했고, 고대 로마인들은 12진법을 사용했다고 합니다.

(그땐 손꾸락이 60개 12개였나?..ㅈㅅ)

그래서.. 컴퓨터는 주로 두개의 전기신호 0과, 1을 이용해 정보를 표현하는 2진법 표현식을 씁니다.

근데 가끔, 100,000이나, 1,000,000과 같이 큰 수를 2진법으로 표현하기에는 한계가있어요..

그래서 8진수와 16진수 또한 사용합니다.

아무튼 그래서 ~ 우리는 10진수와 2진수 8진수 16진수에 대해서 알아보겠습니다.

아두이노 무료강좌중..

위 사진에서 보시면, 2진수, 8진수, 10진수, 16진수의 표가 보이실거에요.

 

신기하지않나요?

 

그래서 우리는 지금부터 진법을 자유자재로 변환하는 기술을 터득해보려고 합니다.

 

 

 

 

 

2. 자리값

우선 진법변환을 하려면 그전에 '자리값'이라는 개념을 먼저 알고 가야합니다.

 

자리값 계산법

이건 말로 설명하는것보다 눈으로 보는게 훨씬 쉬우니 눈으로 보여드릴께요.

수포자 분들 숫자라고 쫄지마세요.(사실 스스로에게

하는말..ㅋㅋ)

중학교1학년 수준의 수학입니다.

 

예를 들어, 5123(10)이라는 숫자가 있다고 가정해봅시다.

(옆에 '(10)'은 10진수라는 표기법입니다.)

 

5123(10)의 자리값은?

첫번째 숫자 5의 자리값은 10³ 입니다.

두번째 숫자 1의 자리값은 10² 입니다.

세번째숫자 2의 자리값은 10¹ 입니다.

네번째숫자 3의 자리값은 10^0 입니다.

 

(0제곱이라는 의미로 ^를 썻습니다. 특수문자에 0제곱은 아무리 찾아도 없네요 -_-^) 

 

어때요 감이 좀 오시나요?

다음 예제를 살펴볼꼐요.

 

 

8진수 예제 입니다.

176(8)의 자리값을 구하시오.

1 = 8²

7 = 8¹

6 = 8^0

 

 

 

 

다음은 16진수 예제입니다.

 

5C31(16)의 자리값을 구하시오

5 =  16³

C = 16²

3 = 16¹

1 = 16^0

 

대충 감이 오시지않나요.

 

 

그래서 만약 10진수 5123(10)를 구하려면?

(5 X 5³) + (1 X 5²) + (2 X 5¹) + (5 X 5^0) = 5123

위 공식이 성립하게 됩니다.

 

참고로 ^0 (0제곱)은 항상 '1' 입니다.

 

 

 

 

 

와 힘드시죠?!

여기서 한박자 쉬시고 !!

다시가요 ~~

 

 

 

 

 

3. 진법변환

이제 본격적으로 주어진 수를 다른 진법으로 변환하는 방법에 대해 살펴보도록 하겠습니다.

위에 언급했다싶히, 컴퓨터에서는 주로 2, 8, 10, 16 진수를 사용되기에 해당 예시만을 살펴보게 됩니다.

 

우선 첫번째로 !

 

2진수 8진수 16진수 -> 10진수 변환법

 

책에서 정의는 이렇게 되어 있습니다.

 

"각 자리의 숫자에 자리값을 곱한 후 모두 더한다"

(이래서 자리값부터 배운거였어요ㅠㅠ)

 

말로만 하면 뭔소린지 1도 모르겠고 직접 해봅시다.

 

Ex)

 

1011(2) 를 10진수로 변환하는 방법입니다.

 

1011(2) = (1 X 2³) + (0 X 2²) + (1 X 2¹) + (1 X 2^0) =

8 + 0 + 2 + 1 =

11(10)

 

짜잔 ! 어떄요 ! 변환이 딱 되지 않나요?

 

 

이어서 8진수 숫자도 해봐요 !

 

135(8) = (1 X 8²) + (3 X 8¹) + (5 X 8^0) =

64 + 24 + 5 =

93(10)

 

다음은 16진수 숫자입니다.

 

20C(16) = (2 X 16²) + (0 X 16¹) + (12 X 16^0) =

512 + 0 + 12 = 

524(10)

 

위에서 C를 12이라고 표현한 것은 위에 표를 참조하시면 좋을 것 같습니다.

16진수 'C'는 12를 의미합니다.

 

축하드립니다 ! 이걸로 2진수 8진수 16진수 숫자를 10진수 숫자로 변환하는 것을 터득했습니다.

 

다음으로 거꾸로, 10진수를 2진수 8진수 16진수로 변환하는 것을 알아보도록 하겠습니다.

 

내가 직접..

 

어때요 좀 이해가 되시나요?!

그런데 ! 우리가 간과한 부분이 있습니다.

정수만을 표현했어요. 실수(소수)부분에 대한 표현은 없었습니다.

그래서 이제부터는 소수에 대한 부분 변환 법에 대해 알아보겠습니다.

 

소수부분의 진법변환의 정의는

"소수부분에 진수값을 곱하고 소수부분이 0이 될 때까지 곱해서, 각 단계에서 발생하는 정수부분을 차례로 나열"

이라고 되어있습니다. 이것도 말로만 들으면 어려우니 직접 해보겠습니다.

 

위와 같은 방식입니다.

노란 화살표 순서대로 나열한 것이니 참고해주시면 좋겠습니다.

(아 .. 내 악필.. ㅠㅠ)

 

 

 

 

 

후.. 힘들다..

한 박자쉬고 다시 갑시다 거의 다왔어요 !!

 

 

 

 

사실 포스팅하는 내용보다 1~2강 정도 더 빨리 진도를 나가고..

복습하고 필요없는 내용 추려서 정리하는 겸해서 포스팅을 하는데요.

처음하는 학문이라 여기서는 무엇이 중요하고 아닌지를 구분짓기가 어렵네요.

오늘 복습 정말 찐~~~하게 하네요.

(2시간째 포스팅중입니..ㄷ....ㅠㅠ)

 

 

 

 

자 이제 이어서 가봅시다 !

 

 

 

 

3. 정보의 표현 단위

컴퓨터에서 정보 표현은 0과 1의 2진 체계로 되어있다고 앞서 언급 했을겁니다.

그럼 이제 컴퓨터가 정보를 표현하고 받아드리는지 '정보 표현 단위'에 대해 알아볼건데요.

 

흔히 컴퓨터에 관심있는 분들은 '컴퓨터 기억용량 단위'에 대해 더 익숙하실겁니다.

정리해보자면, 현대에서 알아야할 용량은 아래 정도의 단위를 이해하면 좋겠습니다.

 

1000 KB (Kilobyte) = 1 MB (Megabyte)

1000 MB = 1GB (Gigabyte)

1000GB = 1TB (Tera Byte)

 

그럼 컴퓨터가 문자 혹은 숫자 특수문자 등과 같은 정보를 저장하는 단위를 알아보도록 하겠습니다.

 

비트(Bit, Binary digit) 은 정보를 나타내는 최소단위로, 2진수 0 또는 1을 의미합니다.

N비트로 표현할 수 있는 표현할 수 있는 정보는 '2ⁿ'개 입니다.

예를들어, 1비트로 표현할 수 있는 정보는 0과 1 두개 뿐입니다.

 

바이트(Byte)는 문자정보를 나타낼 수 있는 최소단위 입니다.

8 Bit = 1 Byte 의 크기 입니다.

알파벳/숫자/특수문자 1개는 1Byte이며,

한글/한자 1개는 2Byte 입니다.

 

워드(Word)는 명령어나 연산을 처리하는 기본단위입니다.

기억장치에 딱 한번 접근해서 얻을 수 있는 데이터의 양을 나타냅니다.

컴퓨터 성능에 따라 2Byte, 4Byte, 8Byte, 16Byte 등 다양하게 존재합니다.

 

 

4. 문자표현

컴퓨터에서는 0과 1밖에 못알아듣는 2진체계를 가지고있잖아요?

그런데 컴퓨터는 어떻게 한글/영어/숫자/특수문자 등을 알아듣게 될까요?

그러기 위해 컴퓨터에서는 각 문자를 유일한 값으로 표현하는 코드체계들이 존재합니다.

그 코드 체계들을 알아보도록 하겠습니다.

 

A. 아스키코드(ASCII, American Standard Code for Information Interchange)

 

미국표준협회(ANSI)에서 통신 시스템간 정보를 교환할 때 쓸 표준코드로 제안한 것입니다.

아스키코드는 총 8비트로 구성되어있으며,

그 중 7비트는 각 문자를 나타내고,

그 중 1비트는 각종 오류를 검사하는 역할을 하는 'Parity Bit'로 구성 되어있어요.

문자를 표현하는 7비트를 존비트(앞의 3개 비트), 디지트비트(뒤에 4비트)로 구분해서 불릅니다.

아스키코드는 7Bit이므로 128개 문자로 데이터를 표현할 수 있습니다.

 

B. 2진화 10진코드(BCD, Binary Coded Decimal)

 

'2진화 10진코드'는 2진체계를 가진 컴퓨터가 10진수를 나타내기위해 사용되는데요.

BCD코드에서는 총 6비트로 구성되어있으며,

앞의 2개 비트는 존비트, 4비트는 디지트비트로 되어있습니다.

6Bit기에, 총 64개의 문자를 표현할 수 있습니다.

 

C. 확장 2진화 10진코드(EBCDIC, Extended Binary Coded Decimal Interchange Code)

 

'확장 2진화 10진코드'는 IBM에서 제정한 코드로, 앞선 BCD코드를 확장&개량한 것이라고 보시면 됩니다.

EBCDIC에서는 총 8비트로 구성되어있으며,

앞의 4개의 존비트와, 4개의 디지트비트로 구성되어있습니다.

8Bit이므로, 총 256개의 문자를 표현할 수 있습니다.

 

D. 유니코드(Unicode)

 

'유니코드'는 전 세계 모든 언어를 통일된 방법으로 표현하고자 만든 코드체계입니다.

1990년 MS, Apple, IBM이 컨소시엄을 구축해 개발된 코드체계 입니다.

데이터 교환의 원활함을 위해 문자마다 할당된 코드 값을 16BIt로 통일했으며, 최대 65,536개의 문자까지 표현할 수 있따는 특징이 있습니다.

 

 

5. 보수

우리는 숫자를 표현할 때 자릿수에 대해 제한을 받지 않습니다.

허나, 한정된 용량을 가진 컴퓨터는 그렇지 못합니다.

뿐만아니라, + - 등의 수학기호를 사용할 수 없어, 부호(-)만 사용이 가능합니다.

즉, 사람은 A - B 가 계산이 가능하지만, 컴퓨터는 A + ( - B )라고 계산합니다.

 

그래서 '보수(Complement)'라는 개념이 등장하게 되는데요.

보수의 정의를 살펴보면 아래와 같습니다.

"두 수의 합이 진법의 밑수(N)가 되게 하는 수" 입니다.

 

역시 정의를 보면 무슨소린지 하나도 모르겠는데요.

 

예시를 들어보겠습니다.

 

예를들어 10진수 4의 10의 보수는 몇일까요?

4 + ( ) = 10

6 입니다.

 

10진수 3의 10의 보수는 몇일까요?

3 + ( ) = 10

7입니다.

 

 

2진법에서는.. '1의 보수', '2의 보수'라는 개념이 있는데요.

 

2진수에서 1의 보수를 구하는 법은 그냥 거꾸로 숫자를 내면 그게 1의 보수입니다.

혹은 자릿수를 맞추어 1을 넣어주고 거기에서 2진수의 값을 빼주면 됩니다.

예를들어 1010(2)의 1의 보수를 구해본다고 가정합니다.

 

   1111

-  1010

-------------------

          0101(보수)

 

1010(2)의 1의 보수는 0101입니다.

 

 

다음으로 2의 보수를 구하는 법을 살펴보겠습니다.

2의보수는 1의 보수값을 구하고 1을 더하면됩니다.

예를들어 1010(2)의 2의 보수를 구한다고 해봅시다.

 

1010(2)의 1의 보수는 ?

 

0101 입니다.

 

그럼

 

0101

+   1

--------------

0110

 

즉, 1010(2)의 2의 보수는 '0110'이 됩니다.

 

 

 

그래서!!

우리가 지금까지 한 이 보수의 개념을 통해 컴퓨터는 덧셈, 뺄셈, 곱셈, 나눗셈까지 연산 할 수 있습니다.

 

 

 

 

- END -

 

 

감사합니다 ^^*

 

 

 

다음 3강에서는 '컴퓨터 구조'에 대해 알아보도록 하겠습니다.

 

'Web Development > CommonSense' 카테고리의 다른 글

[6장] 데이터베이스  (0) 2020.07.11
[5장] 운영체제  (0) 2020.07.10
[4장] 프로그래밍 언어(개요/절차지향/객체지향)  (0) 2020.07.06
[3장] 컴퓨터 구조  (0) 2020.07.04
[1장] 컴퓨터의 개요  (0) 2020.07.02