본문 바로가기
카테고리 없음

컴퓨터의 고정 소숫점 표현

by by이종호기자 2022. 4. 18.
반응형

1. 고정 소숫점 표현방법

보통의 산술식에서 음수는 뺄셈 부호로 양수는 덧셈 부호를 이용하여 표현합니다. 그러나 컴퓨터에서는 하드웨어적인 제약으로 부호를 포함한 모든 것을 1 과 0으로 나타내야 합니다. 따라서 숫자의 맨 왼쪽 비트를 부호 비트로 정하고 0은 양수를, 1은 음수를 나타내고 있습니다.

어떤 숫자에는 부호 이외에도 분수나 정수 또는 분수-정수가 혼합된 수를 나타내기 위하여 이진이나 십진 소숫점이 포함될 수 있습니다. 레지스터에서 이진 소숫점을 표현하는 것은 그것의 위치에 따른 많은 차이 때문에 어려움이 있습니다. 레지스터에서 이진 소숫점을 나타내는 데에는 두 가지 방법이 있습니다.

즉 고정된 위치의 소숫점을 사용하든지, 아니면 부동 소숫점을 채용하는 방법입니다. 고정 소숫점 방식에서는 이진 소숫점이 항상 동일한 위치에 존재하는 것으로, 가장 널리 사용되는 위치는 (1) 분수를 표현하기 위해서 레지스터의 맨 왼쪽에 두는 것과, (2) 정수값을 표현하기 위해서 레지스터의 맨 오른쪽에 두는 것입니다.

두 경우 모두 실제로 이진 소숫점이 존재하는 것은 아니지만, 마치 있는 것처럼 가정하고 저장된 숫자를 분수 또는 정수로 취급합니다. 부동 소숫점 방식에서는 첫번째 레지스터에 저장된 십진 소슷점의 위치로 두번째 레지스터에 저장된 숫 자를 나타냅니다.

2. 정수 표현 방법

어떤 이진 정수가 양수이면, 부호는 0이고 크기는 양의 이진수로 표현됩니다. 음수의 이진수는 부호가 1이고, 크기는 다음 중에서 하나로 표현됩니다.

  1. 부호절대값 (signed-magnitude) 표현
  2. 부호화된 1 의 보수 (signed-l's complement) 표현
  3. 부호화된 2의 보수 (signed-2's complement) 표현

부호절대값 표시에서 음수는 음수 부호와 그 크기를 나타내는 절대값으로 구성 되어 있으며, 다른 두 가지 방법에서는 음수가 그 절대값에 대한 1 또는 2의 보수 형태로서 표현됩니다. 예를 들어 + 14를 8비트의 레지스터에 표시해 보면 00001110으로 됩니다. 여기서 가장 왼쪽 비트는 부호 비트로서 0일 때 양수이고, 1일 때 음수입니다.

부호절대값 표현에서는 + 14에서 부호 비트만 보수를 취하여 - 14를 표현하 고, 부호화된 1 또는 2의 보수 표현에서는 부호 비트를 포함한 숫자 전체를 1 또는 2의 보수로 취하여 一 14를 나타냅니다. 컴퓨터에서는 주로 부호화된 보수 표현을 사용합니다. 1의 보수는 0에 대해 두 가지 값(+0과 -0)을 가지기 때문에, 산술 연산보다는 논리 연산에 주로 사용됩니다. 따라서 앞으로 이 책에서 사용되는 음수는 모두 부호화된 2의 보수 표 현으로 나타냅니다.

3. 산술 가산

부호절대값 표현에서 두 수의 덧셈은 보통의 산술 연산과 같습니다. 즉 두 수의 부호가 동일하면, 절대값을 더한 후 공통의 부호를 주고, 두 수의 부호가 다를 경우에는 절대값이 더 큰 수에서 작은 수를 빼고 큰 수의 부호를 붙여줍니다. 즉 (+25) + (一37) = 一 (37 一 25) = 一 12입니다.

이 과정은 먼저 두 수의 부호와 절대 값을 비교한 후에 덧셈이나 뺄셈 연산을 필요로 합니다. 이와는 대조적으로 부호 화된 2의 보수 표현에서는 비교와 뺄셈이 필요없고 덧셈과 보수화만으로 두 수의 덧셈을 계산합니다. 덧셈 과정은 다음과 같습니다. 먼저 부호를 포함하여 두 수 를 더하고, 부호 비트의 캐리는 무시합니다. 음수 결과도 자동적으로 2의 보수 형태로 만들어집니다.

보수화된 형태는 사람에게는 익숙치 않은 표현입니다. 따라서 부호화된 2의 보 수 표현은 그 값을 사람이 인식하기 위해서는 양수로 변환되어야 합니다. 예를 들어 부호화된 이진수 11111001 은 음수입니다. 이에 대한 2의 보수는 00000111 이고, 십진수로는 +7과 같습니다. 따라서 원래 음수는 -7과 같은 것입니다.

4. 산술 감산

음수가 2의 보수로 표시되어 있을 때 감산은 간단히 수행됩니다. 부호 비트를 포함한 감수 (subtrahend) 의 2의 보수를 취한 다음, 가산하면 됩니다. 여기서 물론 부호 비트를 포함해서 가산합니다.

2의 보수를 이용한 양수와 음수의 변환은 간단히 이루어집니다. 다음의 뺄셈 (-6) - (-13) = +7은 8비트 이진수로 11111010 11110011 로 표현됩니다. 이 빼른 셈은 감수 (-13)에 대한 2의 보수를 취하여 (+13) 으로 만들어주면, 이진수에 서는 11111010 + 00001101 = 100000111과 같이 덧셈으로 계산할 수 있습니다. 다음 에 end 캐리 2°을 제거하면 원하는 결과인 00000111 (+7)을 얻을 수 있습니다. 부호화된 2의 보수 형태의 이진수에 대한 덧셈과 뺄셈도 부호없는 이진수에 서와 동일한 방법으로 계산되기 때문에, 하드웨어는 하나의 회로만이 필요합니다. 그러나 사용자나 프로그래머는 사용된 숫자의 종류(부호의 유무)에 따라 결 과를 적당히 해석하여 이해하여야 합니다.

5. 오버플로

두 수를 가산해서 n + 1 자리의 합을 얻었을 때 우리는 오버플로가 생겼다고 말합니다. 이것은 부호를 가졌든, 갖지 않았든 이진수나 또는 십진수에 대해서 진리입니다. 우리가 연필과 종이로 가산할 때 오버플로는 문제가 되지 않습니다. 왜냐하면 합을 쓸 자리가 충분하기 때문입니다.

디지탈 컴퓨터에서 메모리 레지스터를 포함한 모든 레지스터의 길이가 한정된 길이이기 때문에 오버플로는 문제가 됩니다. nt 1비트의 결과는 표준 길이 n비트의 레지스터에 저장할 수 없습니다. 이러한 이유로 컴퓨터는 오버플로의 발생을 검사하고, 오버플로가 발생 했을 때 오버플로 플립플롭을 세트합니다.

두 수에 대한 덧셈 연산 후 오버플로의 검사는 두 수의 부호화 여부에 따라 달라집니다. 부호가 없는 수에 대한 덧셈의 경우에 최상위 비트에서 end 캐리가 발생하면 오버플로이고, 부호가 있는 수의 덧셈일 때는 부호 비트도 숫자의 일부분으로 간주되기 때문에 이것을 보고 오버플로를 판단할 수 없습니다.

한 수가 양이고 한 수가 음일 때는 가산 후에 오버플로가 생길 수 없습니다. 왜냐하면 두 개의 원래의 수 중 큰 것보다 작아지기 때문입니다. 만약 두 수가 모두 양이거나 음일 때 가산 결과에 오버플로가 생길 수 있습니다. 어떻게 이러한 일이 일어나는가를 알기 위해서 다음과 같은 예를 생각합니다.

70과 80에 해당되는 부호를 가진 이진수가 두 개의 8비트 레지스터에 저장된 다. 레지스터의 최대 용량은 (27 一 1) = 127이고, 최소 용량은 -27 = -128 입니다. 두 수의 합은 150이므로 레지스터의 용량을 초과합니다. 이것은 두 수가 모두 양 이거나 음이면 실제로 용량을 초과합니다.

반응형

댓글