왜 2의 보수? - wae 2ui bosu?

컴퓨터에서 음수 양수를 구별 하기위해 최상위 비트=MSB를 부호비트로 쓰는것이다.

최상위 비트가 0이면 양수, 1이면 음수로 표현 한다.
 

0001은 1, 1001은 -1

여기엔 문제가 있다.

2진수의 계산이 힘들어 진다는 것이다.

 1001 + 0001 = 1010

 (-1)    (1)    (0 이어야 함)
 

의미상으로 는 0000이나와야 하나 실제는 다르게 나온다
 

이 것을 해결하기 위해 나온것이 1의 보수이다.


1의 보수란, 음수 표현시에 0을 1로, 1을 0으로 바꿔주는 것
 

1의 보수로 표현하자면,

0001은 1, 1110은 -1이 된다.

계산을 다시 해보면
 

1110 + 0001 = 1111

 (-1)   (1)    (0이어야 함)

계산 해보면 0000이 아닌 1111이 나왔다.

이렇게 나오는 이유는 1의 보수가 1111,0000의 두가지 의 영을 갖기 때문이다.(이것이 1의 보수의 문제점)

1101 + 0001 = 1110

(-2)      (1)      (-1)

계산이 맞다.

1의 보수의 문제점을 해결 하기 위해 나온것이 2의 보수이다.

2의 보수란 0을 1로, 1을 0으로 모두 바꿔준후에 1을 더하는 방법이다.

0001은 1, 1111은 -1이된다.

다시 계산해 보면
 

1111 + 0001 = 10000

(-1)   (1)      (0이어야 함)
 

의 결과 가 나오는데 이 값은 맞게 된다. 최상위 비트가 1이지만 범위를 벗어났기 때문에

무시하기 때문이다. 따라서 0000 => 0이 된다.
 

1의 보수나 2의보수 는 감산기가 필요 없이 더하기만으로 뺄셈이 가능하다.

1의 보수는 결과에 캐리가 발생시 캐리값을 연산해주어야 한다.

그에 반해 2의 보수는 발생한 캐리를 무시 하기때문에 다른 처리를 할필요 가 없다.


쉽게 2의 보수를 표현하는 방법으로는 밑의 13을 예로 들면
오른쪽에서 왼쪽으로 가는도중 최초로 나오는 일까지 그대로 써주고 나머지는 보수를 취해주면
2의보수가된다.


<컴퓨터가 보수를 쓰는이유>

보수를 쓰는 이유는 컴퓨터가 (-)라는 개념이 없기 때문이다.

컴퓨터가 인식할 수 있는 것은 전기가 들어왔다(ON)전기가 나갔다(OFF)이것만 인식이

가능한데 음(-)이라는 개념은 컴퓨터에서 인식할수 없기 때문에 보수를 씁니다

1의 보수는 0이라는 개념이 없을때는 그냥 사용해도 좋으나

0의 개념이 들어갈 경우 1의 보수로 한다면 (+)0과 (-)0이 나오게 됩니다

분명히 0은 하나밖에 없는데 음, 양의 개념으로 나뉜다면 컴퓨터가 오작동 합니다

이를 방지하기 위해 2의 보수를 사용합니다.

2의 보수는 0의 개념이 단 하나로 지정되기 때문에 컴터가 오작동 할 이유가 없죠

그냥 쓰실때는 1의 보수도 괜찮으나

0의 개념을 쓰실경우는 2의 보수를 이용하여 사용하시는게 낫죠

결론은

음수 계산 및 기타 계산은 1의 보수 또는 2의 보수 둘 다 사용이 가능하지만

0의 개념을 하나로 통합하여 사용하기 위해서는

2의 보수를 사용하는게 좋다.

인트로

안녕하세요. 오늘은 프로그래밍의 개념 중 하나인 '보수'에 대해 포스팅하겠습니다.

보수란 '보충해주는 수'라는 의미를 가지고 있습니다. 10진수 10이 있을때, 4의 보수를 구하라고 하면 4를 더해서 10이 되는 숫자인 6이 '10에 대한 4의 보수'입니다. 즉, N이 있을때,  N의 '2의 보수'를 구하라고 하면 다 더해서 N이 되는 숫자인 그 '어떤 수'가 보수인 것이죠. 2진수에서 2의 보수( two's complement )는 음수를 나타냅니다. 

목차 

1) 왜 2의 보수는 음수인가?

2) 2의 보수를 구하는 과정

3) 2의 보수 구하는 방법 정리 

4) 2진법 계산기 사이트 소개

1) 왜 2의 보수는 음수인가?

10진수에서 2에 대한 10의 보수는 8입니다. 즉 2 + 8 = 10 이기 때문이죠. 2진수에서 2의 보수는, 더해서 2, 즉 2진수 표현으로 10(2)이 되어야합니다. 즉, 맨 왼쪽비트가 1로 증가하고 나머지는 0이 되어야합니다.

만약 4비트 기준으로 한다면, 맨 왼쪽 비트(첫번째 비트)는 떼어버립니다.

(truncate, CPU의 비트 제한으로 비트 범위 벗어나면 버려버리기 때문에)

우리는 4비트 기준으로 계산했으므로 결과는 0이 됩니다.

따라서 , 어떤수 + 어떤 수에 대한 2의 보수 = 0 이 되어야 하기때문에 어떤수에 대한 2의 보수는 음수가 되는 것입니다.

왜 2의 보수? - wae 2ui bosu?
2의 보수는 왜 음수인가?

2) 2의 보수를 구하는 과정

2의 보수를 구하는 과정은 다음과 같습니다.

1. 1의 보수 구하기 

2의 보수를 구하기 위해서는 1의 보수를 만들어야합니다.

1의 보수란, A와 어떤 수를 더해서 1이 되는 수를 'A에 대한 1의 보수'라고 합니다.

예를 들어 10진수 7의 2의 보수를 만들어보겠습니다.

아래는 7의 이진수  표현입니다.

왜 2의 보수? - wae 2ui bosu?
7의 2진수 표현

아래는 7의 이진수 표현과, 이진수 00000111(2) 을 비트반전을 시킨 모습입니다.

비트반전이란 NOT연산자로써, 0을 1로, 1을 0으로 반전시키는 것을 말합니다.

00000111(2) 을 비트반전시켰더니 11111000(2)이 나왔습니다.

왜 2의 보수? - wae 2ui bosu?
7을 비트반전 시킨 모습

2. 가장 낮은 비트에 1 더하기 

7의 이진수를 구해 비트반전시킨 후, 1을 더합니다.

11111000(2)에 1을 더하면 11111001이 되겠죠. 

우리가 원하는 7에 대한 2의 보수가 나왔습니다. 

11111001은 10진수로 -7입니다.

왜 2의 보수? - wae 2ui bosu?
7에 대한 2진수 표현

3. 2의 보수가 맞는지 확인해보기

우리가 구한 7에 대한 이진수 00000111(2) 와 111111001(2)를 더해봅니다.

더해서 10000000의 아홉자리가 나오면 성공입니다.

여기서 컴퓨터는 8비트기때문에 맨 첫번째 비트인 1은 버립니다.

두 이진수를 더해서 0이 나오면 성공입니다.

왜 2의 보수? - wae 2ui bosu?

3) 2의 보수를 구하는 방법 정리

보수를 구하는 방법을 간단하게 말씀드리면 다음과 같습니다.

1) 7을 이진수로 표현한다.

2) 7에 대한 1의 보수를 구한다.

3) 구한 1의 보수에 1을 더한다.

4) 최종적으로 7에 대한 2의 보수와, 7에 대한 2진수 표현을 더해 맨 첫번째 비트는 떼고 0이 되는 지 확인한다.

4) 2진법 계산기 사이트 소개

손으로 일일히 2의 보수를 구해도 되지만, 우리에게는 편리하게 2의보수 계산기를 이미 구현해놓으신 천사가 계시군요.

아래 사이트에서 2진법 계산을 편리하게 이용할 수 있습니다.

2진법 계산기 바로가기

2진법 계산기 - 계산기

우리의 2진법 계산기를 가지고 10진수를 2진수로 간단하게 변환해보세요. 이 계산기를 당신의 웹사이트에서 사용해보세요 [was-this-helpful] 우리의 2진법 계산기를 가지고 10진수를 2진수로 간단하게 변환해보세요. 2진법 계산기를 사용하여 어떻게 10진수를 2진수로 바꾸나요? 2진법 계산기는 10진수를 2진수로 쉽게 바꿀 수 있습니다.  이것을 하는데 매우 간단한 변환이 사용됩니다. 2진법은 두 개의 숫자만을 이용하는 수 체계입니다. 관습적으로

ko.calcuworld.com

이로써, 왜 2의 보수는 음수인가? 와 2의 보수를 구하는 방법을 알아보았습니다.

프로그래밍을 공부하는 분들께 제 글이 많은 도움이 되었으면 좋겠습니다.

감사합니다 :)