CAPS 위키 : 컴퓨터에서의 데이터표현

컴퓨터에서의 데이터표현 [ 수정 내역 ] [ 수정 ]

최근 수정:

목차

1. 개요

2. 신호단위

2.1. 어원

3. 음수

3.1. 부호 절댓값 방법

3.2. 1의 보수 방법

3.3. 2의 보수 방법

4. 실수

4.1. 고정 소수점 방식

4.2. 부동 소수점 방식

5. 상수

1. 개요

2. 신호단위

컴퓨터에서의 신호는 기본적으로 전기신호로 켜져있으면 1. 꺼져있으면 0으로 판단한다.

이것을 나타내는 정보의 최소 단위를 비트(Binary Digit)라고 하며, 1비트에 0과 1밖에 저장하지 못하며,

그 특성으로 인해 비트열은 이진수로 취급된다.

1 비트가 오직 두개의 숫자만을 표현하기 때문에 표현하고자 하는 데이터가 길어지면 길어질 수록 가독성이 떨어진다.

따라서 비트 4개가 모인것을 한번에 16진수로 표현하는 방법을 고안하였고, 이를 16진수 표기법이라 하며 단위는 니블(nibble)이라고 한다.

또한 컴퓨터에서 문자를 표현하고자 하는 목적에 의해 문자(영어) 한 글자를 표현하는 데이터 타입을 고안할 필요성이 생겼는데(아스키코드),

이에 따라 캐릭터(character)라는 단위가 문자 하나를 표현할수 있는 데이터 타입으로 정의되었다.

영문 대소문자 52. 십진 숫자 10. 마침표,쉼표,",' 만으로 64개를 넘겨 1 캐릭터의 표현에는 최소 7개의 비트가 필요하게 되었는데,

문자 정보를 전송할때 신호 변조가 생길 수 있기 때문에 MSB(Most Significant Bit)를 하나 추가하여 신호 변조 여부를 따지는 역할을 부여하여

1 캐릭터 = 8비트가 되었다.(운영체제에 따라 1 char = 7비트 혹은 6 비트인곳도 있었으나, 니블과의 호환성 및 옥텟에 따라 8비트가 최종적으로 되었다)

또한 1 캐릭터는 1 바이트(byte)라고도 하며 영문을 표현하기 위해 고안된 데이터 타입인 만큼 라틴문자 혹은 한자 및 한글을 표현할 수는 없다.

이에 따라 나온것은 유니코드라고 하며, 2~3바이트 이상의 크기를 가진다.

이외에 워드하프워드 더블워드등이 있으나, 4바이트, 2바이트, 8바이트 이 이상의 설명은 생략한다.

2.1. 어원

다음 영어 단어를 듣고 생각해보자.(잘 모르겠으면 사전 검색)

바이트. 비트. 니블.

유럽 부근의 언어를 살펴보면 물다라는 단어는 대개 한움큼 정도의 단위를 가지고 있다.

위 세 단어도 비슷한 뜻을 가지고 있으며, 크기의 차이는 있을지 모르지만 어쨋든 단위를 가리키고 있다.

특히 바이트는 목적 자체가 한번에 집을수 있는(표현할 수 있는) 문자의 기본 단위를 표현하고자 만들어졌고,

실제 어원도 Bite에서 따왔으나, 비트와 구별하기 위해 Byte로 표기하며 실제 숫자 뒤에 나타낼 때에도 비트는 b. 바이트는 B로 나타낸다.

3. 음수

컴퓨터에서 음수 표현 방법은 세가지가 있으며, 그 중 보통 쓰이는 방법은 2의 보수 방법 이라고 한다.

음수에 대해 논하기 전에 중학교 시절 수학을 떠올려 보자.

위 단어가 기억 나는가? 덧셈의 항등원은 0이고 x의 덧셈에 대한 역원은 -x이다.

위 두 사실을 기억하면 이해가 쉬울것이다.

음수라 함은 양수에 더했을때 0을 만드는 수이므로 -부호가 있는 십진수의 경우에는 그저 -만 붙이면 되지만,

신호단위 부분에서 설명 하였듯이 컴퓨터는 오직 0과 1만을 다룰 뿐, -라는 부호를 인식할 수도 없고 int는 4바이트가 한계인것 처럼 데이터의 크기에 한계가 있다.

따라서 다른 방법으로 음수를 표현하여야 하는데 여기에서 위의 양수에 더했을 때 0을 만드는 수 라는 점과 오버플로우에 착안해 추상해 보면

더했을때 100000000(2)을 만드는 수가 곧 음수라고 생각할수 있다(char일 때).

3.1. 부호 절댓값 방법

MSB(첫 비트)만을 바꾸는 방법.

+와 -의 기호라는 점에 착안해서 만들어진 방법이다.

00001011(2) = 11이라는 수가 있다면 10001011(2) = 11 +256 = 267가 -11이라는 방법이다.

간단하지만, 연산시 문제가 생긴다.

예를 들어, 11 + -11이라는 십진수의 연산을 컴퓨터로 바꿔보면

->00001011 + 10001011 = 10010110 = 256+22가 -22로 인식되는 문제가 생긴다.

3.2. 1의 보수 방법

이진수는 오직 0과 1 두가지 수만 표현 가능 하다는 방법에 착안한 방법. 모든 자리를 바꿔 버린다.

가령 00001011(2) = 11 이라는 수가 있으면 11110100(2) = 255-11 = 244가 -11이 되는 방식이다.

바꾸기도 쉽고, 연산에도 큰 문제가 없다.

-> 00001011+11110100 = 11111111(2) = 255.

눈치 빠른 사람은 첫줄을 보고도 알았겠지만, 0과 1밖에 없는 이진수에서 모든 자리를 바꾸고 더하면 당연히 11111111이 나온다.

이에 따라 1의 보수 방법은 0이 2개로 표현된다 (11111111,00000000).

3.3. 2의 보수 방법

1의 보수 방법에 1을 더한다.

00001011(2) = 11가 11110100+00000001(2) = 11110101(2) = 245 = -11

보다시피 그냥 보기만 하면 헷갈릴 수 있으나 더한다면

00001011 + 11110100 + 00000001 = 11111111 + 00000001 = 1 00000000 = 00000000

오버플로우가 일어나 맨 윗자리는 버려진다.

4. 실수

컴퓨터에서의 실수 표현을 간단히 생각해보자.

컴퓨터에서 정수형 데이터 타입이 4바이트이므로 앞의 4바이트를 정수 부분, 뒤의 4바이트를 소수 부분이라고 생각하면 될것이다.

컴퓨터에서 모든 수는 이진수로 표현되므로 소수를 이진수로 표현하는 방법으로

4.1. 고정 소수점 방식

4.2. 부동 소수점 방식

5. 상수