2. 수 체계: 진수 변환과 이진수의 실수/음수 표현(Number System)
컴퓨터에서의 수 체계
컴퓨터에서는 크게 4가지 수 체계를 사용한다.
- 10진수
- 2진수
- 8진수
- 16진수
$a$진수는 $a$의 $n$승을 하나의 자리로 가지는데, 예를 들어 10진수 213은 아래와 같다.
$213_{(10)} = 2 \times 10^2 + 1 \times 10^1 + 3 \times 10^0$
이진수에서의 실수
이진수에서의 실수 표현도 다른 수 체계와 다르지 않다. 소수점 아래로 내려간 자리들은 $2$의 $-n$승의 값을 갖는다. 예를들어, $101.101_{(2)}$는 아래와 같다.
$\begin{align*}
101.101_{(2)} &= (1 \times 2^2) + (0 \times 2^1) + (1 \times 2^0) + (1 \times 2^{-1}) + (0 \times 2^{-2}) + (1 \times 2^{-3}) \\
&= (1 \times 4) + (0 \times 2) + (1 \times 1) + (1 \times \frac{1}{2}) + (0 \times \frac{1}{4}) + (1 \times \frac{1}{8}) \\
&= 5.625_{(10)}
\end{align*}$
이러한 표현을 부동소수점Floating Point이라 한다.
십진수/이진수 변환
십진수에서 이진수로의 변환은 십진수를 계속 2로 나누고, 나머지를 역순으로 나열하면 된다.
실수부에서는, 실수를 2로 곱하여 나온 정수부를 취하는 것을 곱한 결과가 $0.0$이 나올때까지 반복하면 된다.
8진수와 16진수
10진수에서 8진수/16진수로의 변환은 2진수를 거쳐도 되고, 10진수를 8/16으로 나눠 2진수 변환하듯이 해도 된다.
이진수의 연산
이진수의 사칙연산은 10진수와 같은 방법으로 할 수 있다.
또한, 10진수를 왼쪽으로 한 자리 옮기면 $\times 10$ 한 것과 같은 것 처럼, 이진수를 왼쪽으로 한 자리 옮기면 수를 $\times 2$ 한 것과 같은 효과를 갖는다.
음수의 표현
이진수에서 음의 정수를 표현하는 방법은 크게 4가지가 있다.
Excess Notation
숫자를 0부터 세는 대신, 조금 더 앞에서부터 세는 방법.
예를들어, 본인이 3비트로 음수 $-3$을 표현하고 싶다면, 3의 excess notation을 적용하면 된다.
Number | Bits |
-3 | 000 |
-2 | 001 |
-1 | 010 |
0 | 011 |
1 | 100 |
2 | 101 |
3 | 111 |
Excess Notation을 적용한 수의 계산은 아래와 같다.
$ 실제 담긴 숫자 = 원래 숫자 - \text{excess notation}\\
원래 숫자 = 실제 담긴 숫자 + \text{excess notation}$
Sign Magnitude
맨 앞의 첫 비트를 음수/양수를 구분하는 비트로 사용하는 방법이다.
첫 비트가 0이면 양수, 1이면 음수를 의미한다.
이 방법은 편리하지만, 0을 위한 비트가 $\pm$ 두가지 존재하는 문재가 있다. 또한, 비트의 덧셈과 뺄셈 연산이 복잡하다.
Ones' Complement (1의 보수)
1의 보수 표현법은 양수는 그대로 두고, 음수는 1의 보수화 시켜 음수와 양수를 구분한다.
1의 보수는 이진수의 모든 값을 역전시켜 구할 수 있다.
예를들어, $1101_2$의 1의 보수는 $0010_2$이다.
1의 보수는 변환이 쉽고, 덧셈 뺄셈 연산이 쉽지만, 여전히 0을 위한 비트가 두 가지 존재하기에 비효율적이다.
Two's Complement (2의 보수)
2의 보수 표현법은 1의 보수와 비슷하게 양수는 그대로 두고, 음수는 2의 보수를 취해 구분한다.
2의 보수는 1의 보수에 1을 더한 값이다.
2의 보수의 장점은 맨 첫 비트를 부호 비트로 쓸 수도 있고, 0을 위한 값이 000 하나만 존재한다는 것이다.
음의 2의 보수를 10진수로 변환할 때는, 모든 자리를 역전시키고 1을 더한 다음, 음수 기호를 붙여 10진수로 변환하면 된다! 정말 간단하다.
2의 보수 연산
2의 보수의 가장 큰 장점은 뺄셈 연산을 덧셈으로 간단히 처리할 수 있다는 것이다.
2의 보수로 변환된 음수를 양수에 바로 더한 뒤, 넘친 비트를 지우면 된다!
$\begin{align*}
18 = &0001 0010\\
-5 = &1111 1011\\
1&0000 1101 = 13
\end{align*}$
2의 보수의 오버플로Overflow
- 두 양수의 덧셈이 음수라면 오버플로가 일어난 것이다.
- 가장 높은 비트가 1이면 오류가 난 것이다!
- 두 음수의 덧셈이 양수라면 오버플로가 일어난 것이다.
- 가장 높은 비트가 0이면 오류가 난 것이다!
- CPU에서 이런 오류를 잡기가 편하다.
각 방법들의 범위 차이
10진수 | Sign Magnitude $2^{n-1}, 2^{n-1} -1$ | 2's Complement $2^{n-1}, 2^{n-1} -1$ | Unsigned $2^n, 2^n -1$ |
0 | 0000 | 0000 | 000 |
1 | 0001 | 0001 | 001 |
2 | 0010 | 0010 | 010 |
3 | 0011 | 0011 | 011 |
4 | 0100 | 0100 | 100 |
5 | 0101 | 0101 | 101 |
6 | 0110 | 0110 | 110 |
7 | 0111 | 0111 | 111 |
-8 | 1000 | ||
-7 | 1111 | 1001 | |
-6 | 1110 | 1010 | |
-5 | 1101 | 1011 | |
-4 | 1100 | 1100 | |
-3 | 1011 | 1101 | |
-2 | 1010 | 1110 | |
-1 | 1001 | 1111 |
'학부 수업 > 디지털시스템' 카테고리의 다른 글
5. 불 대수 (Boolean Algebra) (0) | 2020.04.11 |
---|---|
4. 디지털 논리 회로 (Logic Gates) (0) | 2020.04.11 |
3. 부동소수점을 활용한 실수 표현 (IEEE 754 Standard Float) (0) | 2020.04.11 |
1. 디지털 시스템 개요 (0) | 2020.04.10 |
세종대학교 디지털 시스템 강의노트 (0) | 2020.04.10 |
댓글
이 글 공유하기
다른 글
-
4. 디지털 논리 회로 (Logic Gates)
4. 디지털 논리 회로 (Logic Gates)
2020.04.11 -
3. 부동소수점을 활용한 실수 표현 (IEEE 754 Standard Float)
3. 부동소수점을 활용한 실수 표현 (IEEE 754 Standard Float)
2020.04.11 -
1. 디지털 시스템 개요
1. 디지털 시스템 개요
2020.04.10 -
세종대학교 디지털 시스템 강의노트
세종대학교 디지털 시스템 강의노트
2020.04.10