<
1의 보수 2의 보수
>
🌠다음 포스팅🌠

SpringBootServletInitializer 상속
☄이전 포스팅☄

(N+1) Error
바이너리의 덧셈과 뺄셈

컴퓨터에서의 음수 표현

Compliment(보수)

두 수의 합이 진법의 밑수(N)가 되게 하는 수를 말하며보수는 컴퓨터에서 음의 정수를 표현하기 위한 방법으로 컴퓨터 내부에서는 사칙연산을 할 때 덧셈을 담당하는 가산기(Adder)만 이용하기 때문에 뺄셈은 덧셈으로 형식을 변환하여 계산이다.

컴퓨터 내부에서는 A - B를 계산할 때 B의 보수(-B)를 구한 다음 A + (-B)로 계산한다.

1의 보수 / 2의 보수 계산

<1의 보수 뺄셈>

5 - 4 == 5 + (-4)

     101 ---> 5
  +) 011 ---> (-4)
     ----------------
     1 000 ---> 1의 캐리 발생
    +) 001 ---> 캐리 더해줌     
    ----------------
       001 ---> 5+(-4) = 1

혹은, 주어진 이진수의 모든 자리의 숫자를 반전(0을 1로, 1을 0으로)시킨 뒤 여기에 1을 더하면 2의 보수를 얻을 수 있다.

예) 뺄셈 **A - ** B는 B의 보수를 구한 다음 덧셈 A + (B의 보수)로 바꾸어 계산

<2의 보수 구하기>

 1의 보수 :01001011(75) 의 모든 자리의 수를 반전 -->  10110100(180)
 
 2의 보수 : 1의 보수 후 1을 더한다.
             
     10110100 ---> 180
  +) 00000001 ---> 1
     ----------------
     10110101 ---> 181

<2의 보수 뺄셈>

  100 - 75 == 100 + (-75)
 1의 보수 :01001011(75) 의 모든 자리의 수를 반전 -->  10110100(180)
 
 2의 보수 : 1을 더한다.
             
      01100100 ---> 100
   +) 10110101 ---> 181 == -75
  -----------
     100011001 ---> 25

1의 보수 vs 2의 보수

1의 보수와 2의 보수의 차이

-> 1의 보수는 -0이 존재한다. 따라서, 0, -0 을기준으로 양수 음수가 대칭이다. 그러나 2의 보수는 0 하나만 존재하므로 -2^31이라는 음수를 표현하는 숫자가 하나 더 존재하게 되어 대칭이 아니다.

컴퓨터에서의 2의 보수

컴퓨터(CPU)를 구성하는 가장 중요한 요소는 레지스터와 ALU인데, 정수형 처리는 ALU에서 이루어진다.
설계 따라 비트수를 결정하고 만들어야 하며 CPU의 비트수 제한으로 인해 이진법 계산의 적용에서 비트를 벗어나면 버리게 된다.

CPU는 4비트 부터 시작 했지만, 사용은 주로 8비트와 32비트 이상을 많이 사용한다. 16비트도 있지만 시장점유율이 그리 높지 않다. 2의 보수를 적용할 때, 프로그램에서 부호를 지정하는 변수를 사용함으로써 구현할 수 있다.

ALU(산술 논리 장치) 셈, 뺄셈 같은 두 숫자의 산술연산과 배타적 논리합, 논리곱, 논리합 같은 논리연산을 계산하는 디지털 회로이다. 산술 논리 장치는 컴퓨터 중앙처리장치의 기본 설계 블록

정리

컴퓨터는 2의 보수를 사용하며 이유는 1의 보수에서는 0이 2개가 존재하므로(+0, -0) 혼돈이 될 수 있다.

또한, 1의 보수에서는 결과값에 캐리가 발생하면 캐리 값을 연산해 주어야 하지만 2의 보수는 발생한 캐리를 무시 할 수 있다.

🧾Reference

  1. 안경잡이개발자 Blog
  2. 1의 보수(위키)
  3. 2의 보수(위키)
Top
Foot