CS(computer science)/Computer Architecture

데이터의 표현과 컴퓨터 연산2 - 부동소수점의 표현

ebang 2023. 1. 7. 23:00
반응형

 데이터의 표현과 컴퓨터 연산



 3.2. 정수의 표현



컴퓨터의 가장 근본이 되는 기능은 수치의 계산이라고 할 수 있다. 

이걸 수행하는 가장 핵심적인 장치가 바로 CPU안에 있는 ALU라고 하는 하드웨어이다. 

(ALU의 구조)



컴퓨터는 2진수의 체계로 수를 저장하고 표현한다. 

모두가 잘 아는 이진수의 체계인데 한번 더 짚고 넘어가자면, 

소수점 이하의 이진수는 2^(-1), 2^(-2), ...  를 의미한다. 

ex) 0.101(2) = 0.5 + 0.125 = 0.625

컴퓨터는 양수 뿐만 아니라 음수도 처리하기 때문에 음수를 표현하는 방법이 필요하다. 

이를 수행하는 데에는 여러가지 방법이 있는데, 공통적인 부분은 2진수의 가장 왼쪽 비트가 부호 비트로 사용된다는 점이다. 

맨 왼쪽 비트, 즉 최상위 비트는 MSB(most significant bit)라고 불리기도 한다. 

부호  비트를 사용하는 2진수 표현으로는 다음과 같은 세 가지 방법들이 있다. 

1. 부호화-크기 표현
2. 1의 보수 표현
3. 2의 보수 표현


3.2.1. 부호화-크기 표현



signed-magnitude representation

맨  왼쪽 비트가 부호비트가 되고, 나머지 비트가 수의 크기를 나타내는 방식이다. 

이 방식에서 결점은, 덧셈과 뺄셈을 수행하기 위해서는 부호 비트와 크기 부분을 별도로 처리해야 한다는 점이 그렇다.  또한, 0을 표현하는 방식이 -0, +0으로 두 가지라는 점 역시 결점이다. 

3.2.2.  보수 표현



1의 보수 표현은, 수의 부호를 바꾸려고 할 때 즉 양수에서 음수로 가거나 음수에서 양수로 갈 때, 모든 비트들을 반전하는 방식이다. 

이와 다르게 2의 보수 표현은, 1의 보수 표현과 비슷하게 모든 비트를 반전하되 1을 마지막에 더해주는 방식이다. 

예를 들어보면 다음과 같다. 

+9 = 0 0001001 

   -9= 1 0001001(1의 보수 표현법)

   -9= 1 0001010(2의 보수 표현법)

1의 보수법의 불편한 점은 다음과 같다. 



1) 0을 표현하는 방식이 2가지이다. 

편의 상 5 비트로 수를 표현한다고 할 때 1의 보수 표현법으로 0을 표현하면 0 0000 과 1 0000 으로 -0, +0이 있다.

2)연산 시에 음수간의 연산인지, 양수 간의 연산인지 직접 판단하여 값을 더할지 뺄 지 정해주어야 한다. 

이와 다르게

2의 보수 표현법의 장점은 다음과 같다. 

 1)수를 표현하면 1의 보수와 다르게, 비트 반전 후에 1을 더하면 바로 부호만 변경된 수를 얻을 수 있다. 

 2) 0을 표현하는 방법이 1가지이다. 

2의 보수 표현법으로 0을 표현하면 0 0000 , 그리고 (1 1111 + 1 = 0 0000) 으로 한가지 방법만 존재한다. 

 3) 1으로 인해, 모든 연산을 더하기로 처리할 수 있게 된다.

 




2의 보수를 어떻게 쓰는 지 알아보자. 

- 2의 보수로 표현된 8-비트 음수를 10진수로 표현하는 방법

1) 가장 앞의 음수표현에 나머지 수는 더하는 방식으로 할 수 있다. 

ex ) A = 10101110(2)

 A = -128 + (32 + 8 + 4 + 2)

= -82

2) 또 다른 방식으로는, 이미 음수임을 알고있으니 양수로 전환 후에 -를 붙여주는 방법도 있다. 

10101110(2) - (01010001 + 1)(2) = - (1+ 16 + 64 + 1) = -82



 3.2.3. 부호-비트 확장



비트가 확장될 때는, 비트의 앞쪽으로 비트가 확장되는데 부호비트와 같은 비트로 확장시킨다. 

 ex) 10진수 21과 -21에 대한  8-비트 길이의 부호화-크기 표현을 16비트 길이로 확장하자.

21 = 00010101(2)

-21 = 11101011(2)

16비트 확장 

21 = 0000 0000 0001 0101(2)

-21 = 1111 1111 1110 1011(2)

   → 확인을 위해  다시 비트 반전하면 0000 0000 0001 0100(2) 이고 

1을 더하면 0000 0000 0001 0101(2) 값을 계산하면 21이 맞다.  

 


현대 컴퓨터에서 쓰이는 수의 표현 체계는 2의 보수법이다. 


2의 보수법



: 모든 연산을 덧셈으로 연산하기 위해서 이 방법을 사용한다. 

요약하자면 1의 보수법 후에 +1을 더하는 방법이다. (0을 1로, 1을 0으로 반전 시킨 후 1더하기)

ALU에서는 연산시 다음 플래그를 사용한다 : C V Z S → carry ,overflow, zero, sign 플래그이다. 

V flag- 오버플로우 확인하는 방법: carry in ≠ carry out 인 경우에 해당한다. 

 



부동소수점 수의 표현



:소수점의 위치를 이동시킬 수 있는 수의 표현 방법: 수 표현의 범위를 확대한 것. 

N이라는 숫자가 있을 때, 아래와 같은 형태로 표현한다.

컴퓨터에서는 B가 2, M이 이진수로 표현된 수일 것이다.



S : 부호 , M : 가수(mantissa) , B : 기수(base),  E : 지수 (exponent)

S: sign  필드 E : 지수 필드 :  십진수로 바꿔서 B의 제곱.  M : 가수 필드. B^E에 이걸 곱해서 표현한다.

E 비트 수가 커지면 표현할 수 있는 데이터 범위가 늘어나고, M 비트 수가 커지면 정확도가 늘어난다!



- biased exponent : 


0을 제대로 표현하기 위해 나타난 방법으로, bias에 특정 수를 더해서 bias로 표현한다. 

실제 지수값은 바이어스에 따라 가장 작은 값 ( ex. bias. = 127이면 0은 -127.) 이 된다.

아래 예제를 보자. 

 

E bit의 값이 실제값은 100(2), 십진수로는 4임에도, 표현할 때는 bias인 128을 더한 값을 사용하는 것을 볼 수 있다.

또한 M bit에서 0. 다음에 오는 수는 반드시 1이므로, 소수점 자리에서 맨 앞의 1을 제외하고 표현한다. 

이진수로 0.1101101일 때 소수점의 자리 수가 1101101일 때, 101101로 쓸 수 있는 것이다!

 

 

 

 



IEEE 754 표준 부동소수점 수의 형식 (32 - bit)

이 형식에서는 bias를 127로 사용하고, 노란 형광펜이 칠해진 줄에서 보이는 비트 수만큼 각 비트수를 갖는다. (1,8,23)

아래 예시를 보자.

 

* 32비트 데이터 형식의 표현 가능한 수의 범위

(참고)

 

반응형