프로그래밍 강의/프로그래밍 정보

보수의 개념과 2의 보수

wnsrn3436 2014. 3. 27. 20:36

○ 개념

 

보수는 뺄셈을 덧셈으로 계산할 때 사용합니다.

예를 들어보자면,

 

80 - 48이라는 식이 있다고 했을 때, 48의 10의 보수는 52.

80 + 52 = 132이고요, 여기서 삐져나온 자릿수 100을 빼면 32가 됩니다.

 

어떤가요? 뺄셈을 덧셈해도 뺄셈 계산이 되지요?

컴퓨터 CPU에서는 이러한 방식으로 뺄셈을 2의 보수를 취해서 덧셈으로 계산합니다.

 

○ 공식

 

진법은 2진법, 8진법, 10진법, 16진법 등이 있지요?

모든 진법에는 2가지의 보수가 존재하는데, 만약 R진법이라면 R의 보수와 R-1의 보수가 존재합니다.

즉 10진법에는 10의 보수와 9의 보수가 존재하고, 2진법에는 2의 보수와 1의 보수가 존재하겠지요.

 

이러한 보수를 구하는 공식은 다음과 같습니다.

R진법 N자릿수 X의 R의 보수: R의 N승 - X

R진법 N자릿수 X의 R-1의 보수: R의 N승 - 1 - X

 

즉, 10진수 567의 9의 보수는, 10의 3승 - 1 - 567 = 999 - 567 = 432가 됩니다.

10의 보수는 공식에 의하면, 이전 보수(9의 보수)에서 +1을 취하면 되겠지요, 즉 433이 됩니다.

(이처럼 R-1의 보수를 구했다면, R의 보수는 R-1의 보수에서 +1만 하면 되니 참 쉽지요?)

 

그냥 간단하게 생각하시면 됩니다.

10진수 567의 9의 보수는, 567을 999로 만드는 숫자입니다.

마찬가지로, 8진수 742의 7의 보수는, 742를 777로 만드는 숫자입니다.

 

○ 1의 보수

 

2진법의 1의 보수는 조금 특별합니다.

그냥 비트 전체를 반전시키면 1의 보수가 됩니다.

EX) 2진수 00110010의 1의 보수는 -> 11001101

 

○ 2의 보수

 

2의 보수는 1의 보수에서 +1을 하면 되지만, 더 쉽게 구할 수도 있습니다.

그냥 비트의 최하위 비트(LSB, 가장 오른쪽 비트)에서부터 1을 만날 때까지 그대로 쓰고, 1 뒤에부터는 반전하여 쓰면 됩니다.

EX) 2진수 11010010의 2의 보수는 0 -> 10 -> 1을 만났으니까 나머진 역으로, 00101110

Comments