컴퓨터는 0과 1로 이루어져 있는 비트라는 개념을 사용해 모든 것들 표현합니다.

이러한 컴퓨터는 n개의 비트를 이용해 2^n개의 정수를 표현할 수 있습니다. 정수에는 양의 정수와 음의 정수가 있는데 컴퓨터는 음수 또한 비트로 표현하는데 이때 사용하는 것이 보수라는 개념입니다. 보수는 컴퓨터에서 음의 정수를 표현하기 위해서 고안됐습니다. 


 보수란? - 두 수의 합이 진법의 밑수(n)가 되게 하는 수를 말합니다. 

예를 들어 2진수 1110의 1의 보수는 0001이고,

2진수 0110의 1의 보수는 1001입니다.

컴퓨터 내부에서 사칙연산을 할 때 뺄셈은 덧셈으로 형식을 변환하여 계산합니다. 

바로 보수를 이용해서 a - b를 계산할 때 b의 보수(-b)를 구한 다음 a + (-b)로 계산합니다.

 

 1의 보수 - 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 뺀다.

2진수 0001의 1의 보수는 1110이다.

2진수 1111의 1의 보수는 0000이다.

 

 2의 보수 - 1의 보수에서 1을 더한 것입니다.

2진수 0001의 1의 보수는 1110이고, 여기서 1을 더하면 1111(2의 보수)이다.

2진수 1111의 1의 보수는 0000이고, 여기서 1을 더하면 0001(2의 보수)이다.


 1의 보수를 이용한 뺄셈 : 빼는 수의 1의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리올림이 생겼다면 최하위 비트에 1을 더하고, 자리올림이 생기지 않았다면 연산 결과에 대해 1의 보수를 구한 후 ' - ' 부호를 붙입니다.

 

밑에 계산식에서 2진수 옆에 괄호 안에 숫자는 10진수이다.

2진수 ) 100(4) - 011(3) > 100 + 100 = 1000 / 최상위 비트에서 자리올림이 생겼기 때문에 최상위 비트는 지우고 최하위 비트에 1을 더한 값이 답이다. 즉, 답은 001(1)

 

2진수 ) 100(4) - 111(7) > 100 + 000 = 100 / 자리올림이 생기지 않았기 때문에 100에 대해서 1의 보수를 구한 후 - 부호를 붙인다. 즉, 답은 011(-3)

 

 2의 보수를 이용한 뺄셈 : 1의 보수와 크게 다르지 않다. 빼는 수의 2의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리올림이 생겼다면 최상위 비트를 제외한 나머지 부분이 결과값이고, 자리올림이 생기지 않았다면 결과값에 2의 보수를 구한 후 ' - ' 부호를 붙입니다.

 

밑에 계산식에서 2진수 옆에 괄호안에 숫자는 10진수이다.

2진수 ) 100(4) - 011(3) > 100 + 101 = 1001 / 최상위 비트에서 자리올림이 생겼기 때문에 최상위 비트는 지우고 나머지 값이 답이다. 즉, 답은 001(1)

 

2진수 ) 100(4) - 111(7) > 100 + 001 = 101 / 자리올림이 생기지 않았기 때문에 101에 대해서 2의 보수를 구한 후 - 부호를 붙인다. 즉, 답은 011(-3)

 

2의 보수는 1의 보수와 달리 음의 정수를 하나 더 표현할 수 있어서 효율적입니다. 그래서 대부분의 컴퓨터에서는 2의 보수 방식을 사용합니다.

+ Recent posts