AiPE
보수(Complement)의 정의와 컴퓨터가 음수를 보수로 저장하는 이유 본문
1. 보수(Complement)의 정의
보수(Complement)의 정의를 먼저 알아보자.
우리가 "a의 N의 보수"라고 부르는 것은 어떠한 숫자 a가 있을 때 a+b=N을 만족하는 수 b를 일컫는 말이다.
예를 들어, 3의 10의 보수는 3+7=10이므로 7이다.
컴퓨터에서는 보수를 음수를 표현하는 데 사용한다.
컴퓨터는 기본적으로 덧셈의 연산만이 가능하기 때문에 뺄셈은 "음수를 더한다"라는 개념으로 접근한다.
컴퓨터는 2진수로 동작하므로 2진수와 관련된 <1의 보수>와 <2의 보수>만을 다루면 된다.
이진수에서 1과 2의 보수를 구하는 방법은 아래와 같다.
2. 1의 보수를 구하는 방법
1의 보수를 구하는 방법은 굉장히 단순하다.
① 표현하고자 하는 수를 이진수 비트로 나타낸다.
Ex. 3을 4비트 이진수로 표현하면 `0011`이 된다.
② 모든 자리의 비트를 반대로 바꾼다.
Ex. 0011의 보수는 `1100`이다.
이게 1의 보수를 구하는 방법 전부이다. 굉장히 간단한 것을 볼 수 있다.
3. 2의 보수를 구하는 방법
2의 보수를 구하려면 가장 먼저 1의 보수를 구해야 한다. 이후 마지막 자리에 1을 더하는 것으로 2의 보수를 구한다.
① 표현하고자 하는 수를 이진수 비트로 나타낸다.
Ex. 3을 4비트 이진수로 표현하면 `0011`이 된다.
② 모든 자리의 비트를 반대로 바꾸어 1의 보수를 구한다.
Ex. 3의 1의 보수를 구하면 `1100`이 된다.
③ 구한 1의 보수 마지막 비트에 1을 더하고, 이후 비트에 대해 올림(Carry)를 수행한다.
Ex. `1100`의 마지막 비트에 1을 더해 `1101`이 된다. 이 숫자가 3의 2의 보수이다.
올림(Carry)란? |
위의 예시로는 올림(Carry)의 계산법에 대해 정확하게 알 수 없다. 따라서 Carry가 발생하는 과정을 예시로 들어 Carry가 정확히 무엇인지 알아보자. 1. 숫자 '6'의 경우, 4비트 이진수로 표현하면 `0110`이다. 2. 6의 2의 보수를 구하기 위해 먼저 6의 1의 보수를 `1001`로 얻는다. 3. 6의 2의 보수를 구하기 위해 마지막 비트에 1을 더한다. 이 때 이미 그 자리에 1이 존재하므로 이를 올림하여 왼족에서 3번째 자리에 1을 적고, 마지막 자리를 0으로 한다. 4. 따라서 6의 2의 보수는 `1010`이다. 이진수에서의 Carry는, 우리가 십진수 덧셈 할 때 한 자리의 합이 10이 되면 하나 더 큰자리로 1을 올리듯, 합이 2가 되면 하나 더 큰 자리로 1을 올려주는 작업이다. 합이 10이 아닌, 2라는 것 이외에는 일반적인 십진수에서의 올림과 정확히 동일하다. |
4. 음수를 보수로 저장했을 때의 장점
그렇다면 음수를 보수로 저장했을 때의 이득은 무엇일까?
음수를 보수로 저장했을 때의 장점 |
① 효율적인 뺄셈 보수를 사용하면 뺄셈 연산을 덧셈 연산으로 변환할 수 있다. 이는 하드웨어에서 덧셈 회로를 공유하여 구현하는 데 유리하다. ② 음수 표현의 단순화 보수를 사용하면 음수를 표현하는 데 추가적인 비트나 특별한 플래그를 사용하지 않고도 음수를 직관적으로 표현할 수 있습니다. N비트 이진수에서 가장 처음 자리 (맨 왼쪽) 비트가 1일 경우 음수, 0일 경우 양수이다. 모든 자리의 비트를 살피지 않고도 부호를 판단할 수 있다. ③ 두 수 체계의 일관성 보수를 사용하면 양수와 음수를 동일한 방식으로 다룰 수 있다. 이는 컴퓨터 시스템에서 음수를 처리하기 유리하다. |
간단하게 정리하자면, 컴퓨터에서 음수를 보수로 지정하는 이유는 뺄셈 연산을 간소화하고 음수를 효율적으로 표현하기 위함이다.
'[XiBBaL] Study > Java' 카테고리의 다른 글
Java 자료형 총정리 (0) | 2024.03.25 |
---|---|
부동 소수점 방식의 정의와 컴퓨터가 부동 소수점 방식을 취하는 이유 (0) | 2024.03.25 |
Java의 반복문 문법 (0) | 2024.03.25 |
Java SE / JDK / JRE / JVM 용어 정리 (0) | 2024.03.25 |
Java 및 GitHub의 기본 (스터디 1주차) (0) | 2024.03.24 |