IT개발및프로그래밍/자료구조

자료의 표현: 컴퓨터에서 데이터가 처리되는 방법

devgodmj 2024. 10. 21. 20:59

컴퓨터에서 데이터를 표현하는 방식은 매우 중요합니다. 특히 컴퓨터는 데이터를 처리하고 계산할 때 메모리와 성능에 영향을 주기 때문에, 숫자나 문자가 어떻게 표현되는지 이해하는 것은 필수적입니다. 

 

1. 정수 자료의 표현

컴퓨터는 정수를 여러 가지 방식으로 표현합니다. 주로 양수와 음수를 표현하거나 음수를 다루는 방식에 따라 다양합니다. 

  • 부호와 절대값(Sigin-Magnitude Representation)
    • 정수를 표현할 때 부호와 절대값을 따로 구분하여 표현하는 방식입니다.
    • 부호: 숫자가 양수인지 음수인지를 나타냅니다. 보통 최상위 비트(왼쪽 첫 번째 비트)가 부호를 나타내며, 0이면 양수 1이면 음수입니다.
    • 절대값: 나머지 비트는 숫자의 절대값을 나타냅니다.
    • 간단하지만 0을 두 번 표현할 수 있다는 문제(양의 0, 음의 0)가 있습니다.
  • 1의 보수(One's Complement)
    • 음수를 표현할 때 1의 보수는 해당 숫자의 모든 비트를 반전시켜(0을 1로, 1을 0로) 표현합니다.
    • 양수는 그대로 표현되고, 음수는 해당 양수의 1의 보수로 취하여 표현됩니다.
    • 덧셈/뺄셈 연산이 비교적 쉬운 편이지만, 0을 양의 0과 음의 0으로 두 번 표현하는 문제가 있습니다.
  • 2의 보수(Two's Complement)
    • 2의 보수는 음수를 표현할 때 가장 널리 사용되는 방식입니다. 양수는 그대로 표현되고, 음수는 해당 양수의 2의 보수를 구하여 표현합니다.
    • 2의 보수는 1의 보수에 1을 더하는 방식으로 계산됩니다.
    • 연산이 매우 효율적이며, 0을 한 번만 표현할 수 있습니다. (양의 0, 음의 0 문제가 해결됨)
      컴퓨터 시스템에서 음수를 표현하는 가장 일반적인 방식입니다.
  • 초과 코드(Excess Code 또는 Bias Code)
    • 초과 코드는 정수를 표현할 때 모든 숫자에 일정한 상수를 더해서 표현하는 방식입니다.
    • 이 방식은 주로 지수를 표현할 때 사용되며, 양수와 음수를 다룰 수 있습니다.
    • 주로 부동 소수점에서 지수를 표현할 때 사용되며, 숫자를 양수로만 다룰 수 있다는 장점이 있습니다.

2. 실수 자료의 표현

실수 자료의  표현은 컴퓨터에서 소수점이 있는 수(실수)를 표현하는 방식입니다. 주로 소수점 이하의 값을 다루는 실수 자료는 고정 소수점과 부동 소수점 방식으로 나뉩니다. 이 두 방식은 실수를 어떻게 저장하고 처리할지에 대한 방식에 차이가 있습니다. 

 

  • 고정 소수점(Fixed Point Representation)
    • 고정 소수점 방식은 소수점의 위치가 고정되어 있는 실수 표현 방법입니다. 소수점의 위치가 고정되어 있기 때문에 정수부와 소수부가 일정한 자릿수를 갖습니다. 
      • 부호부: 수의 양수/음수를 나타냅니다.
      • 정수부: 소수점 왼쪽의 값을 나타냅니다.
      • 소수부: 소수점 오른쪽의 값을 나타냅니다.
    • 특징
      • 정확성: 소수 자릿수가 고정되어 있기 때문에 소수점 이하의 숫자를 처리할 때 오류가 적습니다.
      • 메모리 효율: 메모리 공간이 상대적으로 적게 들며, 하드웨어적으로 구현하기 쉬워서 연산 속도가 빠릅니다.
      • 제한성: 표현할 수 있는 수의 범위가 작습니다. 소수점 이하 자릿수를 크게 할 경우, 큰 수를 표현하기 어렵고 반대로 정수부 자릿수를 크게 하면 소수부가 제한됩니다.


  • 부동 소수점(Floating Point Representation)
    • 부동 소수점 방식은 소수점의 위치가 가변적인 실수 표현 방식입니다. 이는 매우 큰 수나 매우 작은 수를 효율적으로 표현할 수 있으며, 현대 컴퓨터에서 실수를 표현할 때 가장 많이 사용되는 방식입니다.
      • 부호부: 수가 양수인지 음수인지를 나타냅니다.
      • 지수부: 소수점의 위치를 나타내는 지수를 표현합니다.
      • 가수부: 실수의 유효 숫자를 나타냅니다.
    • IEEE 754 표준
      • 현대 컴퓨터에서는 실수 표현을 위해 IEEE 754 부동 소수점 표준을 사용합니다. 이 표준은 부동 소수점을 표현할 때, 단정도(32비트)와 배정도(64비트)로 나뉩니다.
      • 단정도(32비트): 1비트 부호부, 8비트 지수부, 23비트 가수부
      • 배정도(64비트): 1비트 부호부, 11비트 지수부, 52비트 가수부
    • 특징
      • 표현 범위가 넓음: 매우 큰 수와 매우 작은 수를 모두 표현할 수 있어 과학 계산 등에서 유용합니다.
      • 정밀도: 유효숫자의 비트 수에 따라 실수의 정밀도가 결정되며, 이는 제한된 비트내에서 반올림 오차가 발생할 수 있습니다.
      • 복잡한 연산: 부동 소수점 연산은 고정 소수점보다 상대적으로 복잡하고, 더 많은 메모리와 계산 시간이 필요합니다.


  • 고정 소수점과 부동 소수점 비교
    • 표현 범위: 부동 소수점이 훨씬 더 넓은 범위를 표현할 수 있습니다.
    • 정밀도: 고정 소수점은 소수점 이하 자릿수를 명확하게 표현하지만, 부동 소수점은 유효 자릿수가 고정되어 있어 정밀도가 제한적입니다. 
    • 연산 속도: 고정 소수점이 상대적으로 연산 속도가 빠르며, 부동 소수점은 더 복잡한 연산을 필요로 합니다.

3. 왜 자료의 표현이 중요한가?

  • 정확한 계산
    • 컴퓨터는 메모리와 계산 능력이 제한적입니다. 따라서 숫자를 어떻게 표현하는지에 따라 계산의 정확도가 달라질 수 있습니다.
    • 부동 소수점 연산 오류: 부동 소수점 방식에서는 반올림 오차가 발생할 수 있어, 매우 작은 수나 큰 수를 정확하게 계산하지 못하는 경우가 있습니다. 예를 들어, 금융 계산이나 과학적 계산에서 이런 오차는 큰 문제가 될 수 있습니다.
    • 정수 표현의 선택: 음수를 어떻게 표현하는지에 따라 (예: 2의보수, 1의보수) 계산 방식에 차이가 생길 수 있으며 잘못된 자료 표현은 계산 오류로 이어질 수 있습니다.
  • 효율적인 메모리 사용
    • 메모리 자원이 제한된 상황에서 효율적인 자료 표현은 매우 중요합니다. 숫자의 크기나 정밀도에 따라 적절한 자료 표현 방식을 선택하면 메모리를 절약할 수 있습니다. 
    • 예를 들어, 고정 소수점 방식은 메모리를 절약하면서도 계산이 간단하고 빠른 반면, 부동 소수점은 더 많은 메모리를 사용하지만 매우 넓은 범위의 값을 표현할 수 있습니다.
    • 메모리 절약: 부동 소수점 방식은 복잡한 수치 표현을 가능하게 하지만, 메모리 사용량이 상대적으로 크며 고정 소수점은 메모리를 절약하지만 표현 가능한 수의 범위가 작습니다.
  • 연산의 속도와 효율성
    • 자료 표현 방식은 컴퓨터가 어떻게 연산을 처리하는지에 직접적인 영향을 미칩니다. 
    • 고정 소수점 연산: 고정 소수점 방식은 하드웨어적으로 구현이 단순해 빠른 연산이 가능하지만, 표현 범위가 제한적입니다.
    • 부동 소수점 연산: 부동 소수점은 복잡한 계산을 다룰 수 있지만, 연산 속도가 느리고 복잡한 알고리즘이 필요합니다.
    • 따라서 프로그램이나 시스템의 목적에 따라 적절한 자료 표현 방식을 선택하면, 연산 속도와 성능을 최적화할 수 있습니다.
  • 호환성과 표준화
    • 자료의 표현 방식이 다르면 서로 다른 시스템 간의 데이터 교환이 어려워질 수 있습니다. 예를 들어, 하나의 시스템이 IEEE 754 표준 부동 소수점을 사용하고, 다른 시스템이 이를 사용하지 않는다면 데이터 교환 시 문제가 발생할 수 있습니다. 
    • 표준화된 자료 표현 방식은 시스템 간의 호환성을 보장하고, 데이터 교환 시 발생할 수 있는 문제를 줄여줍니다.

4. 문자 자료의 표현

컴퓨터는 숫자(이진수)를 처리하는 시스템이기 때문에, 문자를 표현할 때도 각 문자를 숫자로 표현하여 저장합니다. 이를 위해 다양한 문자 인코딩 방식이 존재하며, 대표적인 문자 자료의 표현 방식으로 ASCII, 유니코드 등이 있습니다.

 

  • ASCII(American Standard Code for Information Interchange)
    • ASCII는 1960년대에 개발된 문자 인코딩 표준으로, 주로 영문 알파벳, 숫자, 특수 문자 등을 표현하는 데 사용됩니다.
    • ASCII는 7비트로 구성되어 있으며, 총 128개의 문자를 표현할 수 있습니다. 8비트를 사용할 경우 확장 ASCII로 256개의 문자까지 표현할 수 있습니다.
    • 기본적인 영어 알파벳, 숫자, 제어 문자(탭, 줄 바꿈 등) 등을 포함합니다.
    • ASCII는 영어 이외의 언어를 표현하는 데는 적합하지 않으며, 특히 한글, 일본어, 중국어 같은 다국어 문자는 표현할 수 없습니다.
  • 확장 ASCII(Extended ASCII)
    • ASCII의 확장 버전으로 8비트(1바이트)를 사용하여 총 256개의 문자를 표현할 수 있는 방식입니다. 
    • 초기에는 유럽어 문자(악센트 기호가 포함된 문자)를 추가로 표현하기 위해 개발되었습니다.
    • 확장 ASCII도 유럽어 일부를 포함하는 데 그치며, 여전히 모든 세계 언어를 표현하기에는 부족합니다.
  • 유니코드(Unicode)
    • 유니코드는 전 세계의 모든 문자를 표현하기 위해 만들어진 표준입니다. ASCII와 확장 ASCII의 한계를 극복하기 위해 개발된 방식으로, 다양한 언어와 기호를 표현할 수 있습니다.
    • 유니코드는 일반적으로 UTF-8, UTF-16, UTF-32와 같은 인코딩 방식으로 구현됩니다.
      • UTF-8: 가변 길이 인코딩으로, 한 문자를 표현하는 데 1바이트에서 최대 4바이트까지 사용할 수 있습니다. 가장 널리 사용되는 유니코드 인코딩 방식입니다.
      • UTF-16: 2바이트 또는 4바이트를 사용하여 문자를 표현 합니다. 주로 한글, 중국어, 일본어와 같은 다국어 문자를 표현할 때 사용됩니다.
      • UTF-32: 모든 문자를 4바이트로 고정된 길이로 표현하며, 가장 많은 문자를 표현할 수 있지만, 메모리 사용량이 큽니다.
      • 유니코드는 모든 문자를 표현할 수 있는 장점이 있으며 웹 브라우저, 데이터베이스, 운영 체제 등에서 폭넓게 사용됩니다. 특히 UTF-8은 가변 길이 인코딩으로 공간 효율성이 뛰어나며, 인터넷 상에서 기본적인 문자 인코딩 방식으로 자리 잡고 있습니다.