9/8 컴퓨터 수체계
정수를 비트로 표현하는 방법
-
양의 정수 표현
컴퓨터는 2를 밑으로 하는 수 체계인 2진수를 사용하고 있으며, 10진수와 마찬가지로 첫번째 자리는 1, 두번째 자리는 2, 세번째 자리는 $\2^2^$ … 을 의미한다.
2진수에서 가장 오른쪽의 비트를 가장 작은 유효 비트(LSB), 가장 왼쪽의 비트를 가장 큰 유효 비트(MSB)라고 한다..
-
음의 정수 표현
-
부호와 크기
음수와 양수를 구별하기 위해 흔히 부호를 사용한다. MSB를 부호를 나타내는데 사용한다고 하자. 그럼 4비트 중 3비트가 남고 이를 사용하면 0 ~ 7까지 나타낼 수 있다.
부호 $2^2$ $2^1$ $2^0$ 10진수 0 1 1 1 +7 0 1 1 0 +6 0 1 0 1 +5 0 1 0 0 +4 0 0 1 1 +3 0 0 1 0 +2 0 0 0 1 +1 0 0 0 0 +0 1 0 0 0 -0 1 0 0 1 -1 1 0 1 0 -2 1 0 1 1 -3 1 1 0 0 -4 1 1 0 1 -5 1 1 1 0 -6 1 1 1 1 -7 문제점
- 0을 표현하는 방법이 2가지라 비용이 낭비된다.
- XOR과 AND를 통한 덧셈 계산을 할 수 없다.(+1과 -1을 더해보면 -2가 나오게 된다.)
-
1의 보수
음수를 표현하는 방법으로, 양수의 모든 비트를 뒤집는 방법이 있다. 하지만 1의 보수 표현법에도 여전히 0이 2개인 문제점은 여전히 가지고 있다. 그리고 덧셈도 쉽게할 수 없다. MSB에서 올림이 발생한 경우, LSB로 올림을 전달해야 하는 순환 올림이 발생한다.
부호 $2^2$ $2^1$ $2^0$ 10진수 0 1 1 1 +7 0 1 1 0 +6 0 1 0 1 +5 0 1 0 0 +4 0 0 1 1 +3 0 0 1 0 +2 0 0 0 1 +1 0 0 0 0 +0 1 1 1 1 -0 1 1 1 0 -1 1 1 0 1 -2 1 1 0 0 -3 1 0 1 1 -4 1 0 1 0 -5 1 0 0 1 -6 1 0 0 0 -7 -
2의 보수
XOR, AND연산만 사용해야 한다면 2의 보수 체계를 이용하면 덧셈을 할 수 있다. +1에 더했을 때 0이 나오는 비트 패턴을 찾고, 이 패턴을 -1이라 하자. 예를 들어, 1111에 0001을 더하면 0000이 된다.
부호 $\2^2^$ $\2^1^$ $\2^0^$ 10진수 0 1 1 1 +7 0 1 1 0 +6 0 1 0 1 +5 0 1 0 0 +4 0 0 1 1 +3 0 0 1 0 +2 0 0 0 1 +1 0 0 0 0 +0 1 1 1 1 -1 1 1 1 0 -2 1 1 0 1 -3 1 1 0 0 -4 1 0 1 1 -5 1 0 1 0 -6 1 0 0 1 -7 1 0 0 0 -8
-
실수를 비트로 표현하는 방법
-
고정소수점 표현법
정수 정수 소수점 분수 분수 값 0 0 . 0 0 0 0 0 . 0 1 0.25 0 0 . 1 0 0.5 0 0 . 1 1 0.75 0 1 . 0 0 1 0 1 . 0 1 1.25 0 1 . 1 0 1.5 0 1 . 1 1 1.75 1 0 . 0 0 2 1 0 . 0 1 2.25 1 0 . 1 0 2.5 1 0 . 1 1 2.75 1 1 . 0 0 3 1 1 . 0 1 3.25 1 1 . 1 0 3.5 1 1 . 1 1 3.75 고정소수점 표현법은 잘 작동하기는 하지만, 유효한 실수값을 표현하기 위해 필요한 비트의 개수가 너무 많기 때문에 이런방식을 잘 사용하지는 않는다. 범용 컴퓨터는 일반적인 문제를 해결하기 위해 만들어진 컴퓨터이기 때문에 플랑크 상수($6.63 x 10^-34J/s$)는 아주 작은수, 아보가드로 수($6.02 x 10^23$)는 아주 큰 수로, 이러한 수들을 표현하려면 몇백개의 비트로 표현해야 하므로 비용이 너무 많이 들어 다른방법을 사용해야 한다.
-
부동소수점 표현법
가수 소수점 가수 지수 지수 값 0 . 0 0 0 0 0 . 0 0 1 0 0 . 0 1 0 0 0 . 0 1 1 0 0 . 1 0 0 0.5 0 . 1 0 1 1.0 0 . 1 1 0 2.0 0 . 1 1 1 4.0 1 . 0 0 0 1.0 1 . 0 0 1 2.0 1 . 0 1 0 4.0 1 . 0 1 1 8.0 1 . 1 0 0 1.5 1 . 1 0 1 3.0 1 . 1 1 0 6.0 1 . 1 1 1 12.0 부동소수점의 문제점
- 비트 조합중에 낭비되는 부분이 많다. 0을 표현하는 방법이 4가지나 되고 1.0, 2.0, 4.0을 표현하는 방법도 두가지씩 있다.
- 비트 패턴이 가능한 모든 수를 표현할 수 없다. 지수가 커질수록 가수의 패턴과 다른 패턴의 사이의 값 차이가 커진다. 이 때문에 6.5를 표현하는 방법이 없으므로 0.5와 6.0을 더할 수 없게된다.
-
IEEE 부동소수점 수 표준
부동소수점 수 시스템은 계산을 수행할 때 실수를 표현하는 표준 방법이다. 부동소수점 표현법보다 더 많은 비트를 사용하며, 가수와 지수에 대해 각각 부호비트를 사용한다. 하지만 지수에 대한 부호 비트는 지수의 비트 패턴에 숨어있다. 낭비되는 비트를 최소화하고 반올림을 쉽게 하기 위한 여러 트릭이 사용된다. IEEE 754는 표준 방법으로 위에서 말한 모든 기능을 제공한다.
IEEE 754 표준에서 두가지 부동소수점 수가 자주 사용되는데, 하나는 기본정밀도 부동소수점 수 이고, 나머지는 2배 정밀도 부동소수점 수이다. 기본 정밀도 수는 32비트를 사용하며 7비트 정밀도로 $-10^-38^$ ~ $\10^38^$ 범위를 표현할 수 있다. 2배 정밀도는 64비트를 사용하며 15비트 정밀도로 $-10^-308$ ~ $-10^-308$ 범위를 표현할 수 있다. 2배 정밀도는 기본 정밀도 수에 비해 지수는 3비트, 가수는 29비트 더 크다.
댓글남기기