Computer Science/Computer Architecture

1의 보수와 2의 보수

h2boom 2024. 6. 19. 17:18

보수

  • 보수 : 보충해주는 수로 어떤 수를 만들기 위해 필요한 수

 

  • n의 보수 = 어떤 수에 대해 n의 제곱수가 되도록 만드는 수
    • ex) 4에 대한 10의 보수는 6이다.
    • = 4에서 10을 만들기 위해 필요한 수는 6이다.

 

  •  n진법에는 n의 보수와 n-1의 보수가 사용된다.
    • 쉽게 말해서 2진법에서는 2의 보수와 1의 보수가 사용된다. 
    • n진법에서 n-1의 보수는 (n의 보수 - 1)이 된다.
      • ex) 2진법에서 1의 보수는 2의 보수 - 1 이다.

 

  • 컴퓨터 내부에서는 덧셈만 가능하기 때문에 보수를 사용한다
    • A - B의 경우 ㅡ> A + (B의 보수)로 바꿔 계산한다.
    • 결국 음수를 표현하고 계산하기 위한 방식

 

  • 캐리: 최상위 비트(MSB)에서 자리 올림이 발생하는 것.
    • ex) 2진수 1000 + 1111 ㅡ> 1 0111로 최상위 비트에서 자리 올림이 발생, 즉 캐리가 발생했다는 의미다.

 

  • 부호가 있는 2진수의 표현의 경우 최상위 비트(MSB)가 0이면 양수, 1이면 음수로 구분한다.

1의 보수

  • 1의 보수 구하는 방식
    • 각 자리의 비트 값을 반전 OR  2의 보수 - 1
    • ex) 2진수 0101의 1의 보수는 1010

 

  •   ~ (tilde) 연산을 비트에 사용하게 되면 비트가 반전된다.
    • 1의 보수를 구하는 방식과 같다.
    • 1 ㅡ> 0, 0ㅡ> 1로 비트 반전.

 

  • 1의 보수 단점으로는 +0, -0으로 0이 둘 다 있고 캐리가 발생하는 경우 +1 을 해야 한다.

2의 보수

  • 2의 보수는 1의 보수의 단점(+0, -0으로 0이 두 개, 캐리 발생)이 모두 해결이 된다.

 

  • 2의 보수 구하는 방식
    • 1의 보수 + 1 = 어떤 수의 비트를 반전시킨 후 + 1

 

  • 2의 보수 사용 예시
    • ex) ~1을 구해보자
      • 1. 10진수 1은 2진수로 0001, ~1 = ~0001
      • 2. ~0001 = 1110, 부호가 있는 정수에서는 최상위 비트(MSB)가 1 이면 음수
      • 3. 1110은 음수를 표현하기에 2의 보수를 구한다.
      • 4. 2의 보수 = 1의 보수 + 1
      • 5. 1110의 1의 보수는 비트 반전을 해준 0001이며 0001 + 1 = 0010 = 2
      • 6. 원래 값은 음수였기에 값에 - 부호를 붙인 -2가 답이다.