정수와 실수의 표현

이 글은 정보통신개론 중 컴퓨터가 정수와 실수를 표현하는 방식을 다룬다.

정수

컴퓨터는 보통 2진수로 정수를 표현한다. 2진수는 0과 1만 사용하기 때문에 다른 진법과 달리 자릿수 표현이 간단하다. 각 자리는 2의 거듭제곱으로 나뉘는데, 예를 들어 1010은 1×2³ + 0×2² + 1×2¹ + 0×2⁰ 으로 계산되어 10진수로는 10이다.

실수

컴퓨터는 실수를 표현할 때 부동소수점 방식을 사용한다. 이 방식은 실수를 정확하게 표현하기 어렵다는 한계가 있지만, 대부분의 경우 실용적으로 충분한 정밀도를 제공한다. 부동소수점 방식은 실수를 32비트 또는 64비트로 표현하며, 비트 수가 클수록 정밀도는 높아지지만 메모리 사용량도 함께 늘어난다. 따라서 실제로는 상황에 맞는 적절한 비트 수를 선택해야 한다.

수치 데이터 형식

고정소수점 표현(Fixed-Point)은 2진 데이터 레지스터[^1]에서 소수점의 위치를 두 가지 방식으로 가정한다. 소수점이 레지스터의 가장 왼쪽에 있다고 가정하면 소수(Fraction: 0.AAAAA) 표현이 되고, 가장 오른쪽에 있다고 가정하면 정수(Integer: AAAAA.0) 표현이 된다.

부호는 MSB(Most Significant Bit)로 나타낸다. 0이면 양수, 1이면 음수다. 양수의 정수 부분은 10진수를 2진수로 변환해 그대로 표시하지만, 음수의 정수 부분은 2의 보수법[^2]을 적용한 뒤 표시한다.

고정소수점 데이터 형식

10진 데이터의 정수를 표현하는 방식에는 두 가지가 있다.

  • 팩 10진 형식(Packed Decimal Format): 10진수 한 자리를 4비트로 표현한다. 가장 오른쪽 4비트는 부호를 나타내며, 양수면 C(1100), 음수면 D(1101)이다.
  • 비팩 10진 형식(Unpacked Decimal Format): 10진수 한 자리를 8비트로 표현한다. 왼쪽 4비트는 zone, 나머지 4비트는 실제 숫자를 담는다.

부동소수점 데이터 형식

부동소수점은 지수부[^3]와 가수부[^4]로 나뉜다. 지수부는 지수를 2진수로 변환해 표시하고, 가수부는 소수점 안의 유효 숫자를 2진수로 표현하며, 이때 소수점은 지수부와 가수부 사이에 있다고 가정한다.


[^1]: 컴퓨터에서 데이터를 일시적으로 저장할 수 있는 작은 메모리 공간이다. CPU 와 직접적으로 연결되어 데이터 처리 및 제어에 사용된다.
[^2]: 2의 보수법은 음수를 표현하는 방법 중 하나로, 어떤 수의 2의 보수는 그 수의 1의 보수에 1을 더한 값이다. 1의 보수는 기존 수의 모든 비트를 반대로 바꾸면 된다. 예를 들어 -5를 8비트 2진수로 나타내면 00000101의 1의 보수인 11111010을 구한 뒤, 1을 더해 11111011이 된다. 이는 5의 2의 보수와 같다. 2의 보수를 사용하면 덧셈과 뺄셈을 동일한 방식으로 수행할 수 있다.
[^3]: 지수부는 실수를 컴퓨터에서 표현할 때 사용되는 부동 소수점 방식에서 지수를 2진수로 변환하여 표현하는 부분이다. 지수부의 역할은 실수의 크기를 표현하고 소수점의 위치를 조정하는 것이다. 지수부는 보통 8비트 또는 11비트로 표현되며 이진수로 표현된 지수는 부호 비트, 지수 부분, 가수 부분으로 나뉜다. 지수부의 크기가 작을수록 표현할 수 있는 수의 범위는 제한적이지만, 정밀도는 높아진다. 반대로 지수부의 크기가 클수록 표현할 수 있는 수의 범위는 넓어지지만 정밀도는 낮아진다. 따라서 적절한 크기의 지수부를 선택하는 것이 중요하다.
[^4]: 가수부는 실수의 소수점 이하 부분을 이진수로 표현한 것으로 소수점은 지수부와 가수부 사이에 있는 것으로 가정한다. 가수부의 크기는 비트 수에 따라 다르며 이진수로 표현된 가수는 부호 비트, 지수 부분, 가수 부분으로 나뉜다. 가수부의 크기가 클수록 표현할 수 있는 수의 범위는 넓어지지만 정밀도는 낮아진다. 반대로 가수부의 크기가 작을수록 표현할 수 있는 수의 범위는 제한적이지만 정밀도는 높아진다.