[Digital Systems] p363-367
https://midoriprogramming.tistory.com/4
[논리회로] 10진수에서 2진수로 전환하는 방법 (Decimal to Binary Conversion), Repeated Division
[Digital Systems] p59-60 https://midoriprogramming.tistory.com/3 [논리회로] 2진수에서 10진수로 전환하는 방법 (Binary to Decimal Conversion) [Digital Systems] p.58 https://midoriprogramming.tistory.c..
midoriprogramming.tistory.com
지난 시간에 10진수를 2진수로 전환하는 방법에 대해서 알아봤다.
이번에는 부호 절대값, 1의 보수, 2의 보수, 부호 확장에 대해서 알아보겠다.
○ 부호 절대값 형태 (Sign and magnitude form)
여분의 부호 비트를 추가해서 부호 + 또는 - 를 나타내는 방법이다.
부호 비트(Sign bit)가 0이면 양수(+)를, 1이면 음수(-)를 나타낸다.
※ Sign-Magnitude로 표시된 4bit 정수
4bit의 경우 부호가 없는 경우 총 16개의 정수를 나타낼 수 있었다.
하지만 Sign-Magnitude로 표기하면 0이 중복되어서 총 15개의 정수만 나타낼 수 있다는 문제점이 있다.
즉, 낭비가 있다.
○ 1의 보수 형태 (1's complement form)
비트를 뒤집으면 음수가 되는 형태가 1의 보수다
위 그림과 같이 01011011(+91)의 비트를 모두 뒤집으면 10100100(-91) 음수가 된다.
※ One's Complement로 표시된 4bit 정수
4bit의 경우 부호가 없는 경우 총 16개의 정수를 나타낼 수 있었다.
하지만 1의 보수로 표기하면 앞의 부호 절대값 형태와 같이 0이 중복되어서
총 15개의 정수만 나타낼 수 있다는 문제점이 있다.
즉, 표현하는 방법만 다르지 0이 중복되어서 낭비가 된다는 점은 똑같다.
○ 2의 보수 형태 (2's complement form)
2의 보수 시스템은 가장 많이 숫자를 나타내는 방법이다.
2진수를 2의 보수 형태로 바꾸는 방법은 다음과 같다.
- 각각의 비트를 뒤집어 준다 (0→1, 1→0) (Change each bit to its complement)
- 1을 더해준다 (Add 1)
1의 보수와 비슷하다. 1의 보수처럼 비트를 뒤집어준 다음 1을 더해주기만 하면 된다.
위 그림과 같이 01011011(+91)의 비트를 모두 뒤집어준 뒤 1을 더하면 10100101(-91) 음수가 된다.
※ Two's Complement로 표시된 4bit 정수
부호 절대값 형태와 1의 보수와는 다르게 중복되어 낭비되는 비트가 없다.
또한 음수와 양수의 표현 범위가 다르다는 것을 알 수 있다.
위의 4bit의 경우 -8 ~ +7까지 표시할 수 있는데
이를 수식화하면 N개의 비트에서는
이런 범위를 나타낸다는 것을 알 수 있다.
○ 부호 확장 (Sign Extension)
시스템에 따라서 숫자를 나타내는 bit의 길이를 변경할 수 있다.
예를 들어 char(8bit) 에서 short(16bit)로 전환한다면 sign bit를 늘려야한다.
- sign bit를 반복하여 추가한다.
● 예시
5bit 숫자를 8bit 숫자로 늘리는 경우
※ 양수
양수에서는 Sing bit가 0이므로 앞에 0을 3개 붙여서 8bit로 확장한다.
※ 음수
음수에서는 Sign bit가 1이므로 앞에 1을 3개 붙여서 8bit로 확장한다.
간혹 음수에서 Sign bit가 1임에도 0을 붙여서 확장하는 실수를 하는 경우가 많으니 조심하자
○ 타입 축소 (Converting to smaller integer type)
위 부호확장과는 반대로 긴 길이의 숫자를 짧은 길이의 숫자로 변경시는 상위 비트를 제거하면 된다.
● 예시
물론 부호 확장된 부분을 제거하는 것이 아닌 경우
즉, 값이 짧은 길이의 숫자의 표현 가능 범위를 넘어 서면 당연히 숫자가 완전히 달라지는 오류가 나니 조심해야한다.