자료구조

데이터를 표현하는 방법(Data representation)

LimeCoding 2022. 1. 28. 20:55

컴퓨터에서의 데이터 표현 방법(Data representation in computer)


컴퓨터는 기본적으로 0와 1을 통해 데이터를 표현한다. 문자, 숫자는 모두 0과 1로 표현되며 특정 규칙을 통해 해석을 할 때 그 의미를 갖는다. 예를 들어 컴퓨터 과학에서 offset이라는 단어는 기준이 되는 주소에서 해당 주소가 얼마나 떨어져 있는지에 대한 변위차를 가리키는 단어이지만 일반적인 영어에서는 '상쇄하다'라는 뜻으로 사용된다. 여기서 특정 규칙은 컴퓨터 과학에서 단어의 의미와 일반적인 영어에서의 의미이다. 0과 1을 나타내는 기준 단위는 비트(bit)이다. 이 비트들이 4개가 되면 니블(nibble)이 되고 8개가 되면 바이트(byte)가 된다.

 

 

 

존 형식과 팩 형식(Zoned Decimal Format & Packed Decimal Format)


일단 설명을 하기에 앞서 존 형식과 팩 형식은 오래된 말이다. 현재는 존 형식과 팩 형식보다는 BCD로 많이 사용한다.

또한 이 형식들은 주로 IBM과 같은 메인 프레임 컴퓨터에서 많이 사용된다.

 

 

존 형식(Zoned Decimal Format)

존 형식은 2진수를 10진수로 표현하는 방법중 하나이다. 상위 4비트를 존 영역(zone)이라고 하고 하위 4비트를 수치 영역(digit)이라고 한다. 10진수를 표현할 때는 가장 마지막에 있는 수의 존 영역은 부호를 나타내며 나머지 수의 존 영역은 1111로 채운다. 부호가 있는 경우에는 16진수로 C(+), D(-)로 표시하고 부호가 없는 경우에는 F(부호 없음)로 표시한다.

 

 

 

존 형식으로 부호가 없는 518, 부호가 있는 +518과 -518은 다음과 같다.

 

여기서 컴퓨터 공학과 학생이라면 불편한 점이 눈에 보인다. 찾았는가? 마지막 존 영역을 제외한 나머지 존 영역의 비트들은 의미 없는 1들로만 채워져 있다. 불필요한 정보들이 공간을 차지하고 있기 때문에 정보의 밀도가 상당히 떨어진다. 이를 해결하기 위한 방법 중 하나가 팩 형식이다.

 

 

팩 형식(Packed Decimal Format)

팩형식은 한 바이트에 2개의 수를 넣어 불필요한 공간 낭비를 줄여준다. 부호는 팩 형식과 동일하게 표기한다.

아래 그림은 부호가 없는 1234, +1234, -1234를 각각의 방법으로 표현한 것이다. 자리를 맞추기 위해 앞에 0을 추가했다.

 

 

2진 정수 표현(binary integer representation)


2진수에서의 정수 표현은 부호-절댓값, 1의 보수, 2의 보수 표현이 있다.  부호-절댓값은 MSB(Most Significant Bit)로 부호를 나타내고 나머지는 수치를 나타낸다. 보수 표현은 2진수에 보수를 취하여 음수를 나타낸다. 모든 표현이 MSB가 1이면 음수를 나타내며 0이면 양수를 나타낸다. 자세한 내용은 다음 포스팅을 보길 바란다. (https://limecoding.tistory.com/4?category=1045756)

 

 

2진 실수 표현(binary real number representation)


이 부분은 추후에 computer system architecture를 통해 자세히 설명하겠다.

 

 

문자 표현(Character representation)


BCD코드는 기본적으로 숫자만을 나타내는 코드였지만 IBM에서 알파벳까지 표현이 가능한 BCD코드를 만들었다.

이를 BCDIC(BCD interchange code)라고 하며 이후에 EBCDIC코드로 계승된다. BCD코드는 ASCII코드처럼 어떤 표준이 없기 때문에 만드는 사람마다 그 규칙이 다르지만 기본적으로 숫자를 표현하는 방법은 같다.

 

여기서 문자를 가지는 BCD코드는 BCDIC코드라고 하겠다. BCDIC코드는 총 6비트로 표현되며 상위 2비트의 존비트와 하위 4비트의 숫자 비트로 이루어져 있다.

아래는 존 비트와 숫자 비트로 문자와 숫자를 나타내는 방법이다.

  • 00: 숫자 0,1~9(1010, 0001 ~ 1001)
  • 01: A ~ I (0001 ~ 1001)
  • 10: J ~ R (0001 ~ 1001)
  • 11: S ~ Z (0010 ~ 1001)

 

EBCDIC코드(Extended Binary-Coded Decimal Interchange Code)는 BCDIC코드에서 존비트가 4개가 된 형태이다. 코드표는 검색을 통해 찾을 수 있다.

 

ASCII(American Standard Code for Information Interchange)코드는 미국 표준 문자 코드로 3개의 존 비트와 4개의 숫자 비트를 가진다. ASCII코드표 또한 검색을 통해 찾을 수 있다.

 

유니코드는 ASCII나 EBCDIC의 영문자와 숫자, 일부 특수 문자밖에 표현할 수 없는 한계를 극복한 코드이다. 우리가 한글을 쓸 수 있는 것도 유니코드로 지원을 하기 때문이다. 유니코드의 양은 표로 표현할 수 없을 정도로 많기 때문에 필요하다면 인터넷 검색을 통해 찾을 수 있다.

 

기타 자료 표현


논리 자료

논리 자료는 참과 거짓을 말하며 다음과 같이 표현할 수 있다.

  • 참: 00000001, 거짓: 00000000
  • 참: 11111111, 거짓: 00000000
  • 거짓: 00000000, 이외는 참(ex 00010001)

참 거짓은 1과 0으로만 표현하는데 왜 8비트씩이나 쓰냐고 질문할 수 있다. 그 이유는 컴퓨터는 기본적으로 바이트 단위로 정보를 전송하기 때문에 1개의 비트만 따로 전송할 수 없다. 그러므로 8비트로 참, 거짓을 표현한다.

 

 

포인터 자료

포인터는 프로그래밍에서 메모리의 상대 주소를 저장하는 자료형이다. 복잡한 자료구조를 다룰 때 유용하게 쓰인다.

 

문자열 자료

문자열은 여러 개의 문자가 하나로 묶여진 형태를 말한다. 표현은 다음과 같이 할 수 있다.

  1. 문자열을 구분자를 기준으로 나누어 저장한다. ex) learn computer data -> {learn, computer, data}
  2. 가장 긴 문자열의 길이에 맞춰 고정 길이로 저장한다.
  3. 부분 문자열을 연속하여 저장한 후 문자열의 시작 주소와 끝 주소를 따로 저장한다.

 

1번 같은 경우 문자의 용량만큼 메모리를 차지하기에 공간적으로는 효율적이지만 비교 연산시에는, 와 같은 구분자도 비교를 해야 해서 속도가 느리다. 2번 같은 경우에는 크기가 고정이기 때문에 비교하기에는 좋지만 어떤 문자열은 문자가 10개인데 어떤 문자열은 문자가 100개라면 10개도 100개의 공간을 만들어 줘야 하기 때문에 공간적인 측면에서는 상당히 비효율적이다. 3번이 공간도 적게 차지하며 포인터의 빠른 접근 시간때문에 시간적 측면에서도 유리하다.

 

 

'자료구조' 카테고리의 다른 글

자료구조란?  (0) 2022.02.21
알고리즘 작성 방법  (0) 2022.02.17
재귀 알고리즘과 반복 알고리즘  (0) 2022.02.17
Big-O 표기법과 시간 복잡도 함수  (0) 2022.02.16
알고리즘 성능 분석  (0) 2022.02.15