기타/컴퓨터공학

2의 보수, 1의 보수

바로이순간 2015. 2. 21. 02:27

컴퓨터에서.. '음수를 표현하기위해 2의보수를 이용'한다.


"" 2의보수를 구하는것은 1의보수+1이며,

  1의 보수를 구하는것은 2진법중 각 자리값의 0과 1을 바꾼 값과같다.

  그래서 2의 보수를 구해서 음수를 나타낸다. ""


EX) 

9-6 = 3 인데.. 2진법으로 고치면 1001(2) - 0110(2) 이고,,

0110(2)=6 의 1의보수는 1001(2)이며

0110(2)=6 의 2의보수는 1010(2)이기때문에

1001+1010 = 1 0011 >> 높아진 자리수를 무시한 값 0011 = 3  이다.


보수란??  n의보수란??


"n의보수"라는 것이 음의 값인가? 양의 값인가?


A에 대한 B의보수란 무엇인가?


위 예제 속 6의 1의보수 1001(2)= -8 + 1 = 7 인가??

1001(2)= -8 + (-1) = -9 인가??

1001(2)= 8 + 1 = 9인가?


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


컴퓨터에서 사용하는 연산(계산)의 종류에는 정수의 계산과, 논리적 계산, 그리고

실수(부동소수점수)의 계산 이렇게 3가지로 크게 나눌 수 있습니다.


이 중에서 보수는 정수의 계산에 쓰이는 개념(방법, 계산법, 회로)입니다.

처음에 컴퓨터는 정수의 계산을 하기 위해서 개발되었습니다.


4칙연산 (더하기, 빼기, 곱하기, 나누기(몫과 나머지)) 중에서 가장 간단한 것이 덧셈입니다.

처음에는 정수의 덧셈을 하는 회로를 만들었습니다. 물론 8비트 덧셈을 하는 장치를 처음에 

만들었고, 나중에는 16비트 덧셈을 하는 회로, 32비트 덧셈을 하는 회로 이렇게 발전이 되었습니다.


덧셈 다음에는 뺄셈을 하는 회로가 필요합니다. 물론 양수를 어떻게 나타낼 것이냐? 음수를 어떻게

나타낼 것이냐가 먼저 결정되어야 합니다. 우리가 종이와 연필로 계산을 할 때는 -부호를 사용해서

음수를 나타냅니다. 


하지만 정해진 비트의 수들을 나누어서 어떤 수는 양수로 사용하고 어떤 수는 음수로 사용하면

편하다. (따로 뺄셈 회로를 만들지 않고 덧셈 회로를 그대로 사용해도 된다)는 것을 알게 되었습니다.


이해를 돕기 위해서 5비트만 사용한다고 해 봅니다.

2진수 5비트는 다음과 같습니다.


5비트  10진수 2의 보수로 본 10진수

--------- =====  ############

00000    0            0

00001    1            1

00010    2            2

00011    3            3

00100    4            4

00101    5            5

00110    6            6

00111    7            7

01000    8            8

01001    9            9

01010   10           10

01011   11           11

01100   12           12

01101   13           13

01110   14           14

01111   15           15

10000   16         -16

10001   17         -15

10010   18         -14

10011   19         -13

10100   20         -12

10101   21         -11

10110   22         -10

10111   23          -9

11000   24          -8

11001   25          -7

11010   26          -6

11011   27          -5

11100   28          -4

11101   29          -3

11110   30          -2

11111   31          -1


위의 32가지 경우가 있습니다.


[1] 먼저 3과 -3을 더해 봅니다.

          00011     3

          11101    -3

----------------------------

        1 00000   5비트가 넘는 비트는 버리고 나면 00000 (십진수 0)이 됩니다.


[2] 이제 5와 -3을 더해 봅니다.

          00101     5

          11101    -3

---------------------------

        1 00010   5비트가 넘는 비트는 버리고 나면 00010 (십진수 2)가 됩니다.


[3] 이제 1과 -3을 더해 봅니다.

          00001     1

          11101    -3

---------------------------

          11110   위의 표에서 보면 이 수는 -2입니다. [이거 제대로 되는 것 같다는 생각이 듭니다.]


=========================================================================

위의 표에서 보면 2의 보수일 경우 맨위의 비트가 0이면 양수 또는 0을 나타내었고

맨위의 비트가 1이면 음수로 나타내었다는 사실을 볼 수 있습니다.


여기서 3의 경우 5비트일 때 2진수는 00011 로 표현 됩니다.

2의 보수로 -3을 나타내기 뒤해서는 2가지 방법이 있습니다.


[첫째 방법] 2의 5승인 32에서 3을 빼준다. 그러면 29가 되고 

그냥 5비트의 2진수로 29를 나타내면 11101이 됩니다. 

이렇게 해서 5비트일 때 2의 보수로 -3을 나타내는 비트를 구해 낼 수 있습니다.


[두번째 방법] 00011 의 1의 보수를 구합니다.

1의 보수[정의, 개념:: 그냥 이렇다고 외우면 됩니다] 는 주어진 비트를 역전시키면 됩니다.

역전시킨다는 말은 0은 1로 바꾸어 주고 1은 0으로 바꾸어 주면 됩니다.


따라서 11100 이 구해 집니다. 여기에 1을 더해줍니다. 그러면 11101이 구해집니다.

이렇게 해서 구해진 11101이 5비트의 경우 2의 보수로 -3을 나타내는 비트를 구한 것입니다. 


위에서 보면 [첫번째 방법]과 [두번째 방법]으로 구한 비트가 같은 것을 알 수 있습니다.

2의 보수를 사용해서 음수를 나타낼 때는 몇비트의 2의 보수인지를 분명히 해야 하고

그 미트만큼을 모두 표시해야만 제대로 양수와 음수를 나타낼 수 있습니다.


$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

위에서 11101이 -3인 것을 알아 내는 방법으로 2의 보수를 구하면 됩니다.


먼저 1의 보수를 구합니다. 00010 이 되고 1을 더하면 00011이 되어서 3이라는 것을

알았읍니다. 주어진 수의 2의 보수를 구하니까 3이 되었다. 주어진 수는 -3이다. 라는 것을

알아 낸 것입니다.


##########################################################


10진수의 경우 10의 보수, 9의 보수를 사용합니다.


123 에 대해서 4자리의 9의 보수를 사용해서 9의 보수를 구하면

9999-123이 되어서 9876 이 됩니다.

123에 대해서 4자리의 10의 보수를 구하면

10000-123이 되어서 9877이 됩니다.


위에서 10의 보수를 구하기 위해서 먼저 9의 보수를 구하고 나서

1을 더해주는 방법을 사용하면 됩니다. 이때도 자리수가 중요합니다.

4자리라는 것이 알려져야 한다는 뜻입니다.


A에 대한 B의 보수에서 A는 123같은 수를 말하고

B는 10 또는 9(4자리라는 것이 알려져야 합니다)가 되는 것입니다.


.................................................................................................................


4비트로 6을 나타내면 0110 이고 1의 보수를 구하면 1001입니다.[그냥 정의 입니다]

여기에 1을 더해주면 1010이 나옵니다. 이 비트가 4비트로 나타낸 6에 대한 2의 보수

또는 4비트 2의 보수로 나타낸 -6입니다.


[첫번째 방법]을 사용하면 16-6=10이 되어서 10을 나타내는 1010이 -6을 나타내고

이 비트가 0110에 대한 4비트의 경우 2의 보수가 되는 것입니다.


[두번째 방법] 1의 보수를 구하고서 1을 더해주면 2의 보수가 된다.