CS

2의 보수(Two's complement)란?

_minit 2024. 10. 23. 10:02

2의 보수를 알기 전에 1의 보수를 알아야 한다.

1의 보수란 모든 비트를 반전시켜 양수를 음수로 변환하는 방법이다. 즉, 0을 1로, 1을 0으로 바꾸는 것이다.

예를 들어, 8비트로 양수 10을 표현하면 00001010이 되는데, 이를 1의 보수로 변환하면 11110101이 된다. 이 방식은 음수를 나타내는 간단한 방법이지만, 덧셈을 수행할 때 문제가 발생할 수 있다. 특히, 1의 보수를 사용한 경우 결과에 대해 캐리 비트를 따로 처리해야 하는 문제가 있다.

 

2의 보수는 1의 보수를 이용해 음수를 표현하는 좀 더 발전된 방법이다. 1의 보수를 구한 후, 여기에 1을 더하면 2의 보수를 얻을 수 있다. 똑같이 8비트로 양수를 10을 표현한 00001010의 1의 보수는 11110101이며, 여기에 1을 더하면 11110110이 된다. 이것이 -10을 의미하는 2의 보수 표현이다.

 

 

양수 (10진수) 8비트 이진수 1의 보수 2의 보수
10 00001010 11110101 11110110
7 00000111 11111000 11111001
3 00000011 11111100 11111101

 

 

2의 보수 구하기

1. 1의 보수 구하기 : 먼저 모든 비트를 반전 시킨다. 즉, 0을 1로, 1을 0으로.

2. 1을 더하기 : 1의 보수에 1을 더한다.

 

 

2의 보수를 사용하는 이유

덧셈회로만으로도 뺄셈을 처리할 수 있기 때문에 하드웨어 설계가 단순해지고 비용이 절감된다. 또한 양수와 음수를 동일한 방식으로 표현할 수 있다는 점도 큰 장점이다. 하지만 2의 보수를 사용하는 데는 몇 가지 한계도 존재한다. 표현 가능한 범위에 제한이 있고 음수를 표현하기 위해 비트를 반전하고 1을 더하는 과정이 하드웨어에서 계산 지연을 일으킬 수 있다. 또한 사람에게 직관적이지 않다는 한계가 있다.

728x90

'CS' 카테고리의 다른 글

부동소수점에 대해서  (0) 2024.11.01
루프 언롤링(Loop Unrolling)이란?  (0) 2024.10.23
ISO 파일이란?  (1) 2024.10.14
인터럽트(Interrupt)란?  (1) 2024.10.10
BIOS / BootLoader란?  (0) 2024.10.07