부동 소수점 방식이란?
● 컴퓨터의 실수 표현
지난 시간에는 컴퓨터의 정수 표현에 대해서 공부하는 시간을 가졌습니다. 컴퓨터에서 소수점을 표현하는 방식에는 고정 소수점 방식과 부동 소수점 방식이 있습니다. 고정 소수점 방식은 소수점이 항상 고정된 위치에 있다는 의미로 정수를 표현할 때 주로 사용되어집니다. 부동 소수점 방식은 소수점의 위치가 바뀌기 때문에 실수를 표현할 때 주로 사용하며 고정 소수점 방식보다 넓은 범위의 수를 표현할 수 있습니다.
부동 소수점 방식으로 저장된 실수는 인간에게 다음으로 해석됩니다.
m X r^e ( m : 가수 r : 밑수 e : 지수 )
예를 들어 57.23 X 10^1에서 가수는 57.23, 밑수는 10, 지수는 1이 됩니다. 572.3 X 10^2에서는 가수가 572.3, 밑수는 10, 지수는 2가 됩니다.
컴퓨에서 실수를 부동 소수점 방식으로 저장하면 부호 비트와 지수 부분과 가수 부분 이렇게 세 영역으로 저장이 됩니다. 부호 비트는 양의 실수인지 음의 실수인지 나타내는 부분이고, 지수 부분은 소수점 위치를 나타내며, 가수 부분은 유효 자릿수를 나타냅니다. 부동 소수점 방식은 표현 범위에 따라 4바이트의 단일 정밀도 형식과 8바이트의 이중 정밀도 형식으로 나눌 수 있습니다.
32비트 체제(단일 정밀도 형식)에서는 부호 부분 1, 지수 부분 8, 가수 부분 23개로 비트를 할당합니다.
64비트 체제(이중 정밀도 형식)에서는 부호 부분 1, 지수 부분 11, 가수 부분 52개로 비트를 할당합니다.
실수를 부동 소수점 방식으로 저장할 때는 정규화 과정을 거칩니다. 예를 들어 2진 소수 101.01 X 2^1은 10.101 X 2^2 등으로 표현해도 그 값이 달라지지 않습니다. 이 때 정규화된 표현은 1.0101 X 2^3입니다. 이와 같이 2진 소수를 정규화시키면 1.XXX로 표현할 수 있습니다. 정규화된 2진 소수 1.0101 X 2^3의 부호는 양수, 가수는 1.0101, 밑수는 2, 지수는 3입니다. 정보를 저장할 때 양의 지수와 음의 지수가 구분되도록 단일 정밀도일 때는 지수에 127을 더하고 이중 정밀도일 때는 1023을 더합니다. 그리고 가수에는 정수 값 1을 생략하고 저장합니다.
위 정규화 과정과 비트 정리 과정을 거치게 되면 '부동 소수점 표현'이 가능해지는 것입니다.
예시 ) 2진수 10110.11011을 단일 정밀도 형식의 부동 소수점으로 나타내봅시다.
2진수 10110.11011을 단일 정밀도 형식의 부동 소수점으로 나타낼 때 먼저 정규화를 해야 하겠습니다.
정규화를 하게 되면 1.011011011 X 2^4이 됩니다. 부호 비트는 양수이므로 0, 지수는 4이므로 바이어스에 적용하면
127 + 4 = 131이 됩니다. 결과적으로 10000011(2) = 131(10)이 됩니다.
가수는 정수 값 1을 제외한 011011011을 저장하고 나머지를 0으로 채우므로 변환된 부동 소수점 표현은 아래와 같습니다.
( 부동 소수점 ) 0 10000011 00000000000000011011011
실제로 이러한 부동 소수점 표현 방식은 IEEE 방식과 IBM 방식으로 나누어지기 때문에 이와 관련한 문제가 출제될 때는 표현 방식에 대해서 구체적으로 명시할 필요가 있습니다. 물론 요즘 주로 쓰이는 방식은 IEEE 방식입니다. 정규화 과정 자체도 시험문제로 많이 출제되는 부분이므로 컴퓨터 개론학에서 반드시 기억하는 것이 좋은 부분입니다.
● 요약
지금까지 컴퓨터의 수 체계에 대해서 계속 학습해오는 시간을 가졌습니다. 간단하게 배운 내용을 정리하도록 하겠습니다.
컴퓨터는 0과 1의 2진 체계를 사용하여 데이터를 표현합니다. 또한 진법을 나타낼 때는 수의 오른쪽 아래 첨자로 진법을 나타내는 숫자를 붙입니다. 자릿값이란 해당 진수에 숫자의 위치를 나타내는 제곱수를 적용하는데, 10진수의 자릿값은 10^0(1), 10^1(10), 10^2(100), ... 과 같습니다. 또한 다른 진수를 10진수로 변환할 때는 각 자리의 숫자에 자릿값을 곱한 후 모두 더하면 됩니다. 반대로 10진수를 다른 진수로 변환할 떄는 정수 부분과 소수 부분을 모두 구분하여 변환한 후 그 결과를 조합한다고 하였습니다. 정수 부분은 변환하려는 진수로 나누어 떨어지지 않을 때까지 반복하고, 마지막으로 각 단계의 나머지를 역순으로 나열합니다. 소수 부분은 변환하려는 진수를 곱합니다. 곱셈 소수 부분이 0이 될 때까지 반복하며, 마지막으로 각 단계에서 발생하는 정수 부분을 순서대로 나열합니다.
정보의 표현은 다음과 같습니다. 정보를 표현하는 최소 단위를 바로 비트(Bit)라고 하며 N개의 비트로 표현할 수 있는 정보의 수는 2^N개 입니다. 문자를 표현하는 최소 단위는 바이트(Byte)라고 하며, 8개의 비트로 구성됩니다. 1바이트는 256(2^8)개의 서로 다른 데이터를 표현할 수 있습니다. 워드(Word)란 명령어나 연산을 처리하는 기본 단위로서, 기억장치에 한 번 접근하여 얻을 수 있는 데이터의 양입니다. 코드란 한글, 영문자, 숫자, 특수문자 등 다양한 문자를 구분하기 위해서 각 문자마다 유일한 값으로 표현한 기호 체계입니다. 코드의 종류는 아스키 코드, 2진화 10진 코드, 확장 2진화 10진 코드, 유니코드 등이 있습니다.
보수란 '두 수의 합이 진법의 밑수가 되게 하는 수를 의미'하며, 음의 정수를 표현하기 위해 고안된 개념입니다. 2진법에는 1의 보수와 2의 보수가 있습니다. 고정 소수점 방식은 '소수점이 고정되어 있다'라는 뜻이지만 실제로 소수점은 존재하지 않습니다. 소수점이 수의 왼쪽에 있다고 가정하면 소수를 나타내고, 오른쪽에 있다고 가정하면 정수를 나타냅니다. 고정 소수점 방식은 주로 정수를 표현하는 데 사용합니다. 고정 소수점 방식에서의 음의 정수 표현은 다음과 같습니다.
- 부호화 절댓값 방식 : 부호 비트 1과 2진수의 절댓값으로 나타냅니다.
- 1의 보수 방식 : 부호 비트 1과 2진수의 절댓값에 대한 1의 보수로 나타냅니다.
- 2의 보수 방식 : 부호 비트 1과 2진수의 절댓값에 대한 2의 보수로 나타냅니다.
부동소수점 방식이란 '소수점이 포함된 실수를 표현하기 위해 사용되며 부호 비트, 지수 부분, 가수 부분으로 구성되는 방식'입니다. 지수 부분은 소수점의 위치를 나타내고 가수 부분은 유효 자릿수를 나타냅니다.
'컴퓨터 기초' 카테고리의 다른 글
| 중앙처리장치(CPU)의 작동 원리를 알아보자! (0) | 2016.06.11 |
|---|---|
| 컴퓨터의 구조를 설명해줄게! (1) | 2016.06.08 |
| 1의 보수와 2의 보수를 이해하자! (11) | 2016.06.06 |
| 아스키코드와 유니코드에 대해서 알아보자! (0) | 2016.06.05 |
| 컴퓨터 진법을 정복해보자! (0) | 2016.06.05 |
1의 보수와 2의 보수를 이해하자!
● 정수 표현
컴퓨터는 N개의 비트를 이용해 2^N개의 정수만 표현할 수 있습니다. 이러한 방식을 이용해서 수를 표현해야 하기 때문에 쉽지 않습니다. 또한 정수는 음의 정수와 양의 정수로 나누어지기 때문에 +, - 기호 또한 전부 비트로 표현을 해주어야 합니다. 하지만 정확히 어떠한 방식으로 이러한 정수를 표현할 수 있을까요? 그것을 알기 위해서는 보수의 개념을 이해하면 됩니다.
보수란, '두 수의 합이 진법의 밑수(N)가 되게 하는 수'를 말합니다. 예를 들어 10진수 4의 10의 보수는 6이고, 10진수 2의 10의 보수는 8입니다. 보수는 컴퓨터에서 음의 정수를 표현하기 위해서 고안되었습니다. 컴퓨터 내부에서는 사칙연산을 할 때 덧셈을 담당하는 가산기(Adder)만 이용하기 때문에 뺄셈은 덧셈으로 형식을 변환하여 계산해야 합니다. 즉 컴퓨터 내부에서는 A - B를 계산할 때 B의 보수(-B)를 구한 다음 A + (-B)로 계산하는 것입니다.
▶ 1의 보수 : 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 빼면 1의 보수를 얻을 수 있습니다.
예시 ) 2진수 1010의 1의 보수는 0101입니다.
▶ 2의 보수 : 1의 보수에 1을 더한 값과 같습니다.
예시 ) 2진수 1010에 대한 2의 보수를 구하려면 2진수 1010에 대한 1의 보수 0101을 구한 다음 1을 더해 0110을 얻습니다.
▶ 덧셈 : 기본적으로 2진수의 덧셈은 10진수의 덧셈과 계산하는 방식이 같습니다.
▶ 뺄셈 : 컴퓨터 내부에서는 덧셈만 가능하기 때문에 뺄셈은 보수를 이용해 덧셈으로 바꿉니다.
예시 ) 뺄셈 A - B는 B의 보수를 구한 다음 덧셈 A + (B의 보수)로 바꾸어 계산합니다.
- 1의 보수 뺄셈 : 1의 보수를 이용한 뺄셈은 빼는 수의 1의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리올림이 생겼다면 최하위 비트에 1을 더하고, 자리올림이 생기지 않았다면 연산 결과에 대해 1의 보수를 구한 후 - 부호를 붙입니다.
예시 ) 111(2) - 110(2) = 111(2) + 001(2) = 1000(2)에서 최상위 비트를 지우고 1을 더하므로 답은 1(2)입니다.
예시 ) 100(2) - 110(2) = 100(2) + 001(2) = 101(2)에서 다시 1의 보수를 취하므로 답은 10(2)입니다.
- 2의 보수 뺼셈 : 2의 보수를 이용한 뺄셈은 빼는 수의 2의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리 올림이 생겼다면 자리올림을 제외한 나머지 부분이 연산 결과이고, 자리 올림이 생기지 않았다면 연산 결과의 2의 보수를 구한 후 - 부호를 붙입니다.
예시 ) 111(2) - 110(2) = 111(2) + 010(2) = 1001(2)에서 최상위 비트를 지우므로 답은 1(2)입니다.
예시 ) 100(2) - 110(2) = 100(2) + 010(2) = 110(2)에서 답은 010(2)입니다.
▶ 곱셈 : 2진수의 곱셈을 하려면 부분 곱(Partial Product)을 이용합니다.
예시 ) 110011(2) X 110(2)은 다음과 같이 계산됩니다.
110011
X 110
-----------
000000
110011
110011
-----------
100110010
결과적으로 답은 100110010(2)입니다.
▶ 나눗셈 : 2진수의 나눗셈을 뺄셈으로 구현합니다.
예시 ) 100110(2) / 110(2)은 다음과 같이 계산됩니다.
110
110 ) 100110
-110
--------
111
-110
--------
10
결과적으로 몫은 110(2)이고 나머지는 10(2)입니다.
▶ 고정 소수점 표현 : 고정 소수점은 소수점이 고정된 위치에 있다는 의미입니다. 소수점이 왼쪽에 있다고 가정하면 소수를 나타내고 오른쪽에 있다고 가정하면 정수를 나타냅니다. 고정 소수점 방식은 용량이 제한적인 컴퓨터에서 매우 큰 수나 작은 수를 표현하기에는 한계가 있어서 정수를 표현할 때 주로 사용되고 있습니다.
부호(S)에 양의 정수는 0을 저장하고 음의 정수는 1을 저장합니다. 크기에는 정수 값을 2진수로 저장하면 됩니다.
고정 소수점 표현에는 음의 정수를 부호화 절댓값 방식, 1의 보수 방식, 2의 보수 방식을 사용하여 나타냅니다.
- 부호화 절댓값 방식 : 부호 비트 1과 2진수의 절댓값으로 나타냅니다.
- 1의 보수 방식 : 부호 비트 1과 2진수의 절댓값에 대한 1의 보수로 나타냅니다.
- 2의 보수 방식 : 부호 비트 1과 2진수의 절댓값에 대한 2의 보수로 나타냅니다.
양의 정수를 표현할 때는 3가지 방식 모두가 부호 비트에 0을 넣는 방식을 채택하지만, 음의 정수를 표현할 때는 제각각인 것입니다.
예시) 8비트로 양의 정수 +13과 음의 정수 -13을 나타내면 아래와 같습니다.
|
표현 방식 |
+13 |
-13 |
|
부호화 절댓값 |
0 0001101 |
1 0001101 |
|
1의 보수 |
0 0001101 |
1 1110010 |
|
2의 보수 |
0 0001101 |
1 1110011 |
또한 부호화 절댓값 방식과 절댓값 방식이 N비트로 표현할 수 있는 수의 범위는 -(2^N-1 - 1) ~ (2^N-1 - 1)입니다. 반면에 2의 보수 방식은 +0과 -0이 존재하는 부호화 절댓값 방식이나 1의 보수 방식과 달리 -0이 존재하지 않습니다. 즉 음의 정수를 하나 더 표현할 수 있어서 더욱 효율적이라고 할 수 있습니다. 따라서 2의 보수 방식으로 표현할 수 있는 수의 범위는 -2^N-1 ~ (2^N-1 - 1)입니다. 대부분의 컴퓨터에서는 2의 보수 방식을 사용합니다.
|
10진수 |
부호화 절댓값 |
1의 보수 |
2의 보수 |
|
-4 |
- |
- |
100 |
|
-3 |
111 |
100 |
101 |
|
-2 |
110 |
101 |
110 |
|
-1 |
101 |
110 |
111 |
|
-0 |
100 |
111 |
- |
|
+0 |
000 |
000 |
000 |
|
+1 |
001 |
001 |
001 |
|
+2 |
010 |
010 |
010 |
|
+3 |
011 |
011 |
011 |
'컴퓨터 기초' 카테고리의 다른 글
| 컴퓨터의 구조를 설명해줄게! (1) | 2016.06.08 |
|---|---|
| 부동 소수점 방식이란? (2) | 2016.06.06 |
| 아스키코드와 유니코드에 대해서 알아보자! (0) | 2016.06.05 |
| 컴퓨터 진법을 정복해보자! (0) | 2016.06.05 |
| 컴퓨터의 역사에 대해서 알아보자! (82) | 2016.06.04 |