1과 2의 보수

최창효·2022년 1월 15일
0
post-thumbnail

들어가기 앞서

  • 이번 포스팅은 인터넷에서 정보를 찾아본 뒤 이해가 쉽게 되지 않아 나름의 생각을 설명으로 풀어쓴 글입니다.
  • 실제 이론과 내용은 이와 다를 수 있음을 감안하고 읽어주시면 감사하겠습니다.

보수란

  • 보충해주는 수
  • (10진법에서) 3에 대한 10의 보수7
    • 310으로 만들기 위해서는 7이 필요하다는 의미입니다.

(2진법에서) 1의 보수

  • 인터넷에서 1의 보수에 대한 설명을 쉽게 0과 1을 바꾼 값으로 설명하고 있습니다.

    • ex)1001의 1의 보수 -> 0110
  • 2진수 1001이 있을 때 위에서 설명한 정의를 적용하면 다음과 같습니다.

    • (2진법에서) 1001에 대한 1의 보수0110
      • 10011로 만들기 위해서는 0110가 필요하다.
        • 1001+01101이 아니기 때문에 10011로 만든다는 문장은 매우 어색합니다.
      • 그래서 1로 만든다는 걸 모든 자리수의 값을 1로 만든다로 바꿔보았습니다.
      • 10011111로 만들기 위해서는 0110이 필요하다.

결론

  • 1의 보수는 A111...11이 되기 위해 필요한 수 B이다.
  • 2진수에서 111...11 - AA에서 0과 1의 자리를 바꾼 값과 같다.

(2진법에서) 2의 보수

  • 인터넷에서 2의 보수1의 보수 +1로 설명하고 있습니다.
    • ex)1001의 2의 보수 -> 0111(0110+1)
  • 2의 보수 역시 처음의 정의를 적용하면 어색한 문장이 됩니다.
    • (2진법에서) 10012로 만들기 위해서는 0111이 필요하다.
    • 그래서 2로 만든다는 걸 다음 자릿수로 만든다로 표현해 바꿔보겠습니다.
      • 100110000으로 만들기 위해0111이 필요하다.
      • 2진법에서 2라는 숫자는 존재하지 않고, 2를 표현하려면 자릿수를 변경시켜야 하기 때문에 자릿수를 변경시킨다는 의미가 어색하지 않습니다.

결론

  • 2의 보수는 A100...0(A보다 한자리 더 많은 수)이 되 위해 필요한 수 B이다.
  • 2진수에서 100...00A+A의 1의 보수+1이다.
    • 왜냐하면 A+A의 1의 보수 = 111...11이기 때문
    • A의 1의 보수+1을 묶어 A의 2의 보수로 볼 수 있다.

뺄셈

  • 보수뺄셈(음수)을 위해 도입된 개념이다.
    • 컴퓨터는 A-BA+(-B)로 바꾸어 계산해야 합니다.
  • 컴퓨터는 부호비트를 통해 음수를 표현하기도 합니다. 비트의 가장 왼쪽 값은 부호를 나타내는 칸으로 활용하기로 약속하는 것이죠.
    • 가장 왼쪽 비트값이 0이면 양수
    • 가장 왼쪽 비트값이 1이면 음수
      • 하지만 부호비트가 무조건적인건 아닙니다. 1000이 있을 때 이를 8로 볼 것인지 -1로 볼 것인지는 경우에 따라 다릅니다.
  • 보수를 이용한 뺄셈은 1의 보수, 2의 보수 둘 다 가능합니다.
    • 1의 보수를 활용한 계산에는 1의 보수를 구한 뒤 +1을 더하는 과정이 필요합니다. 이는 결국 2의 보수를 계산하는 것과 동일한 행위이므로 사실상 1의 보수를 활용한 뺄셈2의 보수를 활용한 뺄셈은 같습니다.
  • 2의 보수를 활용한 뺄셈방법은 다음과 같습니다.(A-B)
    • 빼는 수(B)2의 보수를 구합니다.(B')
    • A빼는 수의 2의 보수(B')를 더합니다.
      • 더했을 때 최상위비트의 자리올림이 생겼다면 자리올림된 부분을 제외한 값이 A-B의 결과입니다.
      • 더했을 때 자리올림이 생기지 않았다면 해당 계산값(A+B')의 2의 보수를 구한 값에 -부호를 붙여준 값이 A-B의 결과값입니다.(B>A인 경우입니다)

계산

마치며

  • 보수의 뺄셈 계산이 왜 저렇게 되어야 하는지에 대한 명확한 설명을 못해서 아쉽다

References

profile
기록하고 정리하는 걸 좋아하는 개발자.

0개의 댓글