커뮤니티

분류1

자유게시판

제목

1의 보수, 2의 보수

컴퓨터를 포함한 각종 논리회로에서 음수를 표현하는 방법은 다음 3가지가 있다.

  1. 부호 절대값 (Sign-Magnitude)
  2. 1의 보수 (1's Complement)
  3. 2의 보수 (2's Complement)

그런데 실제로 널리 사용되는 것은 2의 보수 방식이다. 이유는 회로가 간단해지기 때문이다. 위의 세가지 방식을 각각 살펴보면서 장·단점을 비교해 보자.


1. 부호 절대값 (Sign-Magnitude)


부호 절대값 방식은 가장 쉽게 생각할 수 있는 방식이다. MSB(최상위비트)을 부호비트(0이면 양수, 1이면 음수)로 사용하고, 나머지는 절대값을 표현한다. 4비트 정수를 예로 들면,

0000 +0      1000 -0
0001 1        1001 -1
0010 2        1010 -2
0011 3        1011 -3
0100 4        1100 -4
0101 5        1101 -5
0110 6        1110 -6
0111 7        1111 -7

그런데 부호 절대값 방식에는 몇 가지 문제가 있다. 우선 0이 두 개(+0과 -0)나 존재하기 때문에, 둘 다 0으로 인식하도록 해야 한다. 심각한 문제는 덧셈과 뺄셈을 할 때이다. 인간이 직접 계산할 때처럼 부호와 절대값을 따로 분리해서 계산해야 하고, 음수를 더함으로써 뺄셈을 구현할 수가 없어서 뺄셈기를 따로 구현해야 한다. 그러면 인간이 덧셈과 뺄셈을 수행할 때의 과정을 살펴보자.

2(10) + 3(10) = 0 010 + 0 011 = 0 101 = 5(10)

(양수끼리 더했으므로 양수) <덧셈기 사용>

 

-2(10) + -3(10) = 1 010 + 1 011 = 1 101 = -5(10)

(음수끼리 더했으므로 음수) <덧셈기 사용>


3(10) - 2(10) = 0 011 - 1 010 = 0 001 = 1(10)

(절대값이 큰 수에서 작은 수를 뺐으므로 양수) <뺄셈기 사용> 

2(10) - 3(10) = 0 010 - 1 011 = -(011 - 010) = 1 001 = -1(10)

(절대값이 작은 수에서 큰 수를 뺄 경우에는 순서를 바꿔서 빼고 결과는 음수) <뺄셈기 사용>

인간에게는 매우 쉬운 일이지만, 위의 모든 사항을 고려하여 계산을 수행하는 회로를 만드는 것은 쉬운 일이 아니다. 그리고 <, >, <=, >= 등의 비교연산을 수행할 때 다음과 같은 모순이 생긴다.

3(10) > 2(10) = 0011 > 0010 = TRUE
-2(10) > -3(10) = 1010 > 1011 = FALSE (???)

위와 같이 음수의 경우는 반대가 되므로 이를 구분해야 한다. 사실 비교연산은 뺄셈을 한 후 결과의 부호를 가지고 판단하기 때문에 이는 덧셈과 뺄셈 문제와 동일하다.


2. 1의 보수 (1's Complement)


1의 보수 방식은 부호 절대값 방식에서 단순히 음수의 순서를 뒤집은 것이다.

0000 +0      1000 -7
0001 1        1001 -6
0010 2        1010 -5
0011 3        1011 -4
0100 4        1100 -3
0101 5        1101 -2
0110 6        1110 -1
0111 7        1111 -0

음수의 순서를 뒤집기만 한 것이라 별것 아닌것 같지만 사실 엄청난 유리함이 있다. 우선 재미 있는 성질이 하나 생긴다. 비트를 반전시키면 부호가 바뀌게 된다. 다행히 비트반전은 쉽게 구현할 수 있다. 그리고 MSB가 0이면 양수, 1이면 음수라는 성질은 그대로 유지된다.

3(10) = 0011 >> 1100 = -3(10)
-6(10) = 1001 >> 0110 = 6(10)

뿐만 아니라 부호 절대값 방식에서 골치거리였던 것이 깔끔하게 해결된다. 부호와 절대값을 따로 계산하지 않아도 되고, 음수를 더하는 방식으로 뺄셈을 할 수 있게 된다. 단, 캐리가 발생하면 LSB(최하위비트)에 1을 더해줘야 한다.

2(10) + 3(10) = 0010 + 0011 = 0101 = 5(10) <덧셈기 사용>
-2(10) + -3(10) = 1101 + 1100 = 1001 + 0001 = 1010 = -5(10) (캐리 발생) <덧셈기 사용>
3(10) - 2(10) = 0011 + 1101 = 0000 + 0001 = 0001 = 1(10) (캐리 발생) <덧셈기 사용>
2(10) - 3(10) = 0010 + 1100 = 1110 = -1(10) <덧셈기 사용>

어째튼 덧셈과 뺄셈이 매우 간단해졌다. 음수의 비교연산 모순도 해결되었다.

3(10) > 2(10) = 0011 > 0010 = TRUE
-2(10) > -3(10) = 1101 > 1100 = TRUE

그런데 여전히 0이 두 개인 것과 캐리를 처리해야 하는 문제가 남아있다. 즉, 0000과 1111을 둘 다 0으로 처리해야 하고, 계산과정에 캐리가 발생됐는지 감시해서 LSB에 1을 더해주는 회로를 구성해야 한다.

3(10) - 3(10) = 0011 + 1100 = 1111 >> 0000

게다가 위와 같이 실제 계산과정에서 발생하는 0은 항상 -0인 1111이다.

 

3. 2의 보수 (2's Complement)

 

2의 보수 방식도 단순해서 그저 눈에 거슬리는 -0을 없애기만 한 것이다.

0000 0        1000 -8
0001 1        1001 -7
0010 2        1010 -6
0011 3        1011 -5
0100 4        1100 -4
0101 5        1101 -3
0110 6        1110 -2
0111 7        1111 -1

-0이 없어지고 대신 -8(10)이 등장한 것 외에는 별것 아닌것 같지만, 1의 보수 방식의 골치꺼리였던 -0 문제와 캐리를 처리해야 하는 문제가 사라진다. 2의 보수 방식에서는 부호를 바꾸려면 비트를 반전한 다음 LSB에 1을 더하면 된다.

3(10) = 0011 >> 1100 + 0001 = 1101 = -3(10)
-6(10) = 1010 >> 0101 + 0001 = 0110 = 6(10)

-0는 아예 없으니 이미 해결됐고, 이제 캐리를 처리하지 않아도 되는지 직접 계산해보자.

2(10) + 3(10) = 0010 + 0011 = 0101 = 5(10)
-2(10) + -3(10) = 1110 + 1101 = 1011 = -5(10) (캐리 발생)
3(10) - 2(10) = 0011 + 1110 = 0001 = 1(10) (캐리 발생)
2(10) - 3(10) = 0010 + 1101 = 1111 = -1(10)

위에서 캐리가 발생했을 때, LSB에 1을 더해주지 않아도 결과가 정확한 것을 확인할 수 있다. 이제 덧셈이든 뺄셈이든 그냥 더하기만 하면 된다. 이제 구현해야 하는 회로가 무척 간단해졌음을 느낄 것이다.

 

2의 보수 방식의 장점을 요약하면 다음과 같다.

 

  • MSB가 0이면 양수, 1이면 음수라는 성질이 유지된다.
  • 음수를 더하는 방식으로 뺄셈을 할 수 있다.
  • 음수의 비교연산에서 발생하는 모순이 해결된다.
  • 0이 두개나 존재하는 모순이 해결된다.
  • 덧셈과 뺄셈을 구현할 때 캐리를 처리하지 않아도 된다.

    [출처] 1의 보수, 2의 보수|작성자 꿈드림

0

추천하기

0

반대하기

첨부파일 다운로드

등록자naver21

등록일2020-06-11

조회수5,115

  • 페이스북 공유
  • 트위터 공유
  • 인쇄하기
 
거친 말, 욕설, 모욕 등은 삭제 처리될 수 있습니다.
댓글로 인해 상처받는 분이 없도록 서로 예의를 지켜 주시기 바랍니다. ~ ♬
스팸방지코드 :
번호제목등록자등록일조회수
16자유게시판 하루에 한줄

따봉브라질

2014.08.0714,461
15자유게시판 7월 방문자수 (2014년)

따봉브라질

2014.08.0614,307
14자유게시판 교황 프란치스코, 행동으로 마피아에 맞서다

adidas

2014.08.0414,729
13자유게시판 독일의 등록금

따봉브라질

2014.08.0212,983
12자유게시판 애국심도 남다른 김연아

adidas

2014.08.0114,773
11자유게시판 비정상회담 - JTBC

따봉브라질

2014.07.3015,385
10자유게시판 화장품 회사가 알려주지 않는 진실

따봉브라질

2014.07.3016,229
9자유게시판 성장을 위한 철학 노트

adidas

2014.07.2519,408
8자유게시판 세월호, 72시간의 기록

collins

2014.07.2420,722
7자유게시판 삼성 이건희 회장 어록

adidas

2014.07.2422,249
첫 페이지로 이동 130 페이지로 이동 이전 페이지로 이동   131    132    133   다음 페이지로 이동 마지막 페이지로 이동