본문 바로가기

자바의 정석

[자바의 정석 1권] 음수의 2진 표현 - 2의 보수법

1) 음수의 2진 표현 - 2의 보수법 

 

n비트의 2진수로 표현할 수 있는 값의 개수는 모두 2^n개이므로,

   4비트의 2진수로는 모두 2^4(=16)개의 값을 표현할 수 있다.

   이 값을 모두 '부호없는 정수(0과 양수)'의 표현에 사용하면, 

   '0부터 15까지의 정수'를 나타낼 수 있다. 

 

- 그러면 4비트의 2진수로 부호있는 정수, 즉 양수와 음수를 모두 표현하려면 어떻게 해야 할까?

  4비트 2진수의 절반인 8개는 0으로 시작하고, 나머지 절반은 1로 시작하니까,

  1로 시작하는 2진수를 음수표현에 사용하자.

  이렇게 하면, '왼쪽의 첫 번째 비트(MSB)'가 0이면 양수, 1이면 음수이므로

  첫 번째 비트만으로 값의 부호를 알 수 있게 된다. 

 

2) 2의 보수법

- 어떤 수의 'n의 보수'는 더했을 때 n이 되는 수를 말한다.

  7의 '10의 보수'는 3이고, 3의 '10의 보수'는 7이다.

  3과 7은 '10의 보수의 관계'에 있다고 한다.

  '2의 보수 관계' 역시, 더해서 2가 되는 두 수의 관계를 말하며 10진수 2는 2진수로 '10'이다.

  2진수로 '10'은 자리올림이 발생하고, 0이 되는 수를 뜻한다.

  그래서 '2의 보수 관계'에 있는 두 2진수를 더하면 '(자리올림이 발생하고)0이 된다.'

 

- 2진수 '0101'와 '1011'은 서로 '2의 보수 관계'에 있으며, 이 두 2진수를 더하면 0이 된다.

   이 덧셈이 10진수로도 0이 되려면, 2진수 '0101'가 10진수로 5니까,

   2진수 '1011'은 10진수로 -5이어야 한다. 

 

-이처럼 서로 '2의 보수 관계'에 있는 두 2진수로 5와 -5처럼 절대값이 같고

  부호가 다른 두 10진수를 표현하는 것을 '2의 보수법'이라고 하며,

  현재 대부분의 시스템이 '2의 보수법'으로 부호있는 정수를 표현한다.