보수
보수란 보충해주는 수를 의미한다.
어떤 수 a에 대한 n의 보수는 a와의 합이 n이 되는 수이다.
1에 대한 10의 보수 : 1 + x = 10 -> x=9
3에 대한 5의 보수 : 3 + x = 5 -> x=2
n진수에선 n의 보수와 n-1의 보수가 존재한다.
10진수에는 10의 보수와 9의 보수가 존재하고, 8진수는 8의 보수와 7의 보수가 존재한다.
2진수(0과 1로 구성)를 사용하는 컴퓨터에는 2의 보수와 1의 보수가 존재한다.
1의 보수 : 어떤 수 a와의 합이 1(이진수로 1)이 되는 수
0에 대한 1의 보수 : 0 + x = 1 -> x=1
1에 대한 0의 보수 : 1 + x = 0 -> x=0
2의 보수 : 어떤 수 a와의 합이 2(이진수로 10)이 되는 수
0에 대한 2의 보수 : 0 + x = 0 -> x=0
1에 대한 2의 보수 : 1 + x = 10 -> x=1
2진수에서 1의 보수는 0은 1로, 1은 0으로 바꾸면 된다.
2의 보수에서 0에 대한 2의 보수는 0인데 이는 0에 대한 1의 보수인 1에 1을 더한 결과와 같다.(1 + 1 = 10)
1에 대한 2의 보수는 1이고 이는 1의 대한 1의 보수인 0에 1을 더한 결과와 같다.(0 + 1 = 1)
결과적으로 2진수 a에 대한 2의 보수는 a에 대한 1의 보수에 1을 더한 결과이다.
53의 2진수는 110101이고 1의 보수는 001010, 2의 보수는 001011이다.
컴퓨터에서 수의 표현
컴퓨터에서는 한 워드에서 최상위 비트를 부호 비트(양수:0, 음수:1)로 사용하고 나머지는 데이터 비트로 사용한다.
표현 방식에는 3가지가 있다.
1. 부호화-절댓값
워드의 데이터 비트를 데이터의 절댓값으로 표현한다, 최상위 비트로 부호를 표현하고 나머지 비트에 정수 값을 적는다.
연산의 결과가 정확하지 않으며, 0에 대한 표현이 +0과 -0으로 두 가지가 발생한다.
2. 부호화-1의 보수
부호화-절댓값 표현에서 음수에 대해 1은0, 0은1로 변환하여 표현한다.
연산의 결과가 정확하고, 0에 대한 표현이 +0과 -0으로 두 가지가 발생한다.
3. 부호화-2의 보수
부호화-1의 보수 표현에 1을 더하여 표현한다.
연산의 결과가 정확하고, 0에 대한 표현이 한 가지로 통일된다.
양수는 세 가지 방식에서 모두 같다.
보수의 10진수 변환
1워드가 n비트일 때, 부호화-1의 보수로 표현된 값을 10진수로 변환하는 방법은 2가지가 있다.
1. -(2n-1-1)+(데이터 비트의 10진수 표현)
2. 주어진 1의 보수를 다시 1의 보수로 변환한 후, 10진수로 변환
1워드가 n비트일 때, 부호화-2의 보수로 표현된 값을 10진수로 변환하는 방법은 2가지가 있다.
1. -(2n-1)+(데이터 비트의 10진수 표현)
2. 주어진 2의 보수를 다시 2의 보수로 변환한 후, 10진수로 변환