Computing/Computer Science

Complement (보수)

i독 2021. 11. 23. 14:46

[  ] Concept.

Computer는 2진수로 수를 다루며, 보수라는 개념을 이용하여 덧셈으로 뺄셈을 처리할 수 있다.

 

[  ] 1's Complement

마이너스 부호가 있다면 전체 값을 1로 XOR 하여 더한다. Carry가 발생하면 최하위 비트에 더한다.

 

 1's complement 가산법. >> 15 - 9 = 6

1) 음수 값을 1의 보수화 시킨 후 연산 값과 더한다. 받아올림이 발생한다면 Carry Flag로 표시한다.

- 1111 + 0110(6의 1의 보수 값) = 1000, Carry 1

 

2) 만약 Carry 값이 존재한다면 계산된 값에 1를 더한다.

- 1000 + 1(Carry) = 1001

 

2) 위의 값을 다시 1의 보수로 취한다.

- 1001 XOR 1111 = 0110

 

= 1111(15) - 1001(9) = 0110(6)

 

[  ] 2's Complement

1의 부호화 후 +1를 더한다. 1의 보수와 달리 Carry가 하지 않을 때만 다시 보수를 취한다.

 

2's complement 가산법.  >> 15 - 9 = 6

1) 음수 값을 2의 보수화 시킨 후 연산 값과 더한다.

- 1111 + 0111(6의 2의 보수 값) = 0110, Carry 1

 

2) Carry가 발생하였음으로 연산은 끝난다.

= 1111(15) - 1001(9) = 0110(6)

 

2's cpmlement 가산법. >> 9 - 15 = -6

1) 음수 값을 2의 보수화 시킨 후 연산 값과 더한다.

-1001 + 0001(15의 2의 보수 값) = 1010, Carry 0

 

2) Carry가 발생하지 않았기에 2의 부호화를 취한다.

- negative flag 1, 0101 + 1 = negative flag 1, 0110 = -0110(6)

 

2의 보수화를 진행하다 보면, Carry가 발생하지 않을 경우는 음수 값임을 알 수 있다.

값을 역전시켜 더하는데, 자리올림이 발생하지 않는다면 역전된 값이 피연산자보다 크다는 것을 의미하게 한다.

먄약 2의 보수를 Code로 표현할 시, 이러한 점을 인지하고 있어야 Negative Flag의 조건을 알 수 있다.