Skip to content

Instantly share code, notes, and snippets.

@jmkim
Last active April 20, 2016 18:38
Show Gist options
  • Save jmkim/2e41b2dbd1d524344d0dbf241ff19156 to your computer and use it in GitHub Desktop.
Save jmkim/2e41b2dbd1d524344d0dbf241ff19156 to your computer and use it in GitHub Desktop.

2의 보수 표현법

이진수 중, 0으로 시작하는 수는 양수, 1로 시작하는 수는 음수이다. 이러한 방식을 2의 보수 표현법(two's complement)이라 부른다.

탄생 배경

두 양의 정수 중 작은 수에서 큰 수를 뺀다

이진수의 연산에서, 작은 수에서 큰 수를 빼면, 0으로 시작하는 수에서 빌림을 수행하여, 1로 시작하는 수가 된다.

    0011 1000 - 0100 0111 = 1111 0001

    11    11
    0011 1000
  - 0100 0111
  -----------
    1111 0001

빠른 역부호화 방법

  1. 모든 비트를 역전한다.
  2. 1two을 더한다.

빠른 부호 확장

16비트 이진수 2ten-2ten를 32비트 이진수로 변환하라.

    two                     ten
    ---                     ---
    0000 0000 0000 0010     2

최상위 비트(0)를 취해서 워드의 왼쪽 부분에 16번 복사하고, 워드의 오른쪽 부분에는 원래의 값을 그대로 복사해서 32비트 이진수를 만들 수 있다.

    two                                         ten
    ---                                         ---
    0000 0000 0000 0000 0000 0000 0000 0010     2

16비트 이진수 2를 앞의 빠른 계산방법으로 역부호화하여 -2를 만들자.

    two                     ten
    ---                     ---
    1111 1111 1111 1101     -2

음수를 32비트로 변환하려면 부호 비트를 16번 복사하여 왼쪽에 넣는다.

    two                                         ten
    ---                                         ---
    1111 1111 1111 1111 1111 1111 1111 1110     -2

주의점

  • 2의 보수에는 대응되는 양수가 없는 음수 -2,147,483,648ten이 있다. 이는 음수와 양수 사이에 0ten이 존재하기 때문이다. (짝을 지으면, -2,147,483,648의 짝은 0이다.)

32비트에서의 이진수 표현

    two                                         ten
    ---                                         ---
    0000 0000 0000 0000 0000 0000 0000 0000     0
    0000 0000 0000 0000 0000 0000 0000 0001     1
    0000 0000 0000 0000 0000 0000 0000 0010     2
    ...                                         ...
    0111 1111 1111 1111 1111 1111 1111 1101     2,147,483,645
    0111 1111 1111 1111 1111 1111 1111 1110     2,147,483,646
    0111 1111 1111 1111 1111 1111 1111 1111     2,147,483,647
    1000 0000 0000 0000 0000 0000 0000 0000     -2,147,483,648
    1000 0000 0000 0000 0000 0000 0000 0001     -2,147,483,647
    1000 0000 0000 0000 0000 0000 0000 0010     -2,147,483,646
    ...                                         ...
    1111 1111 1111 1111 1111 1111 1111 1101     -3
    1111 1111 1111 1111 1111 1111 1111 1110     -2
    1111 1111 1111 1111 1111 1111 1111 1111     -1

참고문헌

  • David A. Patterson, John L. Hennessy. (2015). 컴퓨터 구조 및 설계 (5판) (박명순, 김병기, 하순회, 장 훈 역) (pp. 78-84). 서울: 한티미디어. (원서출판 2015).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment