1의 보수

반응형

컴퓨터안의 연산 방법중 뺄셈은

직접적인 뺄셈을 컴퓨터가 수행하지 못하므로
 
보수를 응용해서 계산을 한다고 합니다.


컴퓨터의 진수는 보통 2진수 이므로 2진수의 보수를 응용해

컴퓨터는 뺄셈을 연산하게 된다고 하는데요.


보수란 무엇인지 알아야 할텐데요.

보수에 대해 정리를 하면

보수의 개념: 1의 보수, 2의 보수, 10의 보수 라고 할 때 "보수"의 개념;

보수(補數)- 즉, 보충해 주는 수

추가설명:

10의 보수 설명:

1에 대한 10의 보수는 ? 9 (왜냐하면, 1에 9를 보충하면 10이 된다)
:
:
4에 대한 10의 보수는 ? 6 (왜냐하면, 4에 6을 보충하면 10이 된다)
:
7에 대한 10의 보수는 ? 3 (왜냐하면, 7에 3를 보충하면 10이 된다)
9에 대한 10의 보수는 ? 1 (왜냐하면, 9에 1을 보충하면 10이 된다)


마찬가지로

1의 보수 설명:

1에 대한 1의 보수는 ? 0 (왜냐하면, 1에 0을 보충하면 1이 된다)
1에 대한 0의 보수는 ? 1 (왜냐하면, 0에 1을 보충하면 1이 된다)

가 된다고 합니다.

그럼 보수를 이용해 2진수의 뺄셈을 계산을 알아보면


* 1의 보수를 이용한 뺄셈:

1) 피감수(빼려고 하는 수)에 1의 보수를 취한후 덧셈을 수행한다.

2) 자리올림이 발생하면 '양수(+)'이고 발생하지 않으면 '음수(-)'이다.

3) 자리올림이 발생하면 자리올림수를 최하위 비트에 더한다.

4) 자리올림이 발생하지 않으면 결과값에 다시 1의 보수를 취한다

 

예제1... 5-4=1 의 계산

식1.    1  0  1 (5)
      -  1  0  0 (4) =>  피감수: 1)단계로 피감수(여기선 4)의 보수의 덧셈으로 바꿉니다.
                 ?

   

식2.    1  0   1 
       +  0  1  1 
       1 0  0  0  ====>  자리올림이 발생: 2)단계에서 알수 있듯 자리올림이 있으니 
 자리올림수                                            답은 '양수(+)'입니다.


식3.    1  0  1
      +  0  1  1
          0  0  0
      +          1  ====>  3)단계를 적용하여 자리올림수를 최하위 비트에 더합니다.
      (+)0  0  1  ====>  그럼 답은 001 즉 1 이네요

 

 

 

예제2... 2-9=-7 의 계산

 

식1.    0  0  1  0 (2)
     -   1  0  0  1 (9) => 1)단계를 적용 하면 + 0 1 1 0 을 더합니다.
                    ? 

   

식2.    0  0  1  0
     +   0  1  1  0
          1  0  0  0 =====> 자리올림이 없네요. 2)단계를 참고 하면 답은 '음수(-)'입니다.
  
식3.    0  0  1  0
     +   0  1  1  0
          1  0  0  0
      (-)0  1  1  1 =====> 자리올림이 없으니 4)단계를 적용하여 다시 1의 보수로 바꿉니다.
                                   그럼 답은 -0111이고 10진수값으로 하면 -7이네요.




 int a = ~0;
 int b = ~1;
 int c = ~2;
 int d = ~3;
 int e = ~-0;
 int f = ~-1;
 int g = ~-2;

 결과
a -1
b -2 
c -3 
d -4
e -1
f 0 
g 1 

~3이 왜 -4가 되고 ~5가 왜 -6이 되는 것은 2의 보수시스템을 이해해야 합니다.

위의 정수가 8, 16, 또는 32비트, 그 어느 크기로 할당이 되었다고 해도 상관없습니다.

8비트로 설명해보면

 3은 00000011 

~3은 NOT 3과 같기 때문에 0은 1로, 1은 0으로 변환시키는 연산자입니다.

따라서 ~3 = NOT 3 = 11111100   , 즉 앞의 3을 NOT시킨 것입니다.

00000011 = 2^1 + 2^0 = 3  인것은 아시죠?    ^은 승을 나타냅니다. 즉 2^1 은 2의 1승.

11111100 은 얼마입니까?  물론 2의 보수 시스템 컴퓨터이기 때문에,

11111100 = -(2^7) + 2^6 + 2^5 +2^4 + 2^3 +2^2 = -128 + 64 + 32+ 16+ 8+4 = -4 가 됩니다.

2의 보수시스템에서 맨 앞자리가 1이면 음수이면서 그 값을 나타내기 때문에 -128이 되는 것입니다. 위와같이 해석되기 때문에 항상 NOT연산은 항상 1이 더 적은 수가 됩니다. 이것을 전문적으로 이야기하면 NOT연산은 1의 보수시스템으로 변환하는 것과 같다고 이야기합니다.

TAGS.

Comments