Java 2의보수법

2021. 6. 10. 18:49Java

2의 보수법

어떤 수의 'n의 보수'는 더했을 때 n이 되는 수를 말한다. 7의 '10의 보수'는 3이고, 3의 '10의 보수'는 7이다. 3과 7은 '10의 보수의 관계'에 있다고 한다. '2의 보수 관계' 역시, 더해서 2가 되는 두수의 관계를 말하며, 10진수 2는 2진수로 '10'이다. 2진수로 '10'은 자리올림이 발생하고 0이 되는 수를 뜻한다. 그래서 '2의 보수 관계'에 있는 두 2진수를 더하면 (자리올림이 발생하고) 0이된다

10의 보수관계 → 두수를 더했을 때 10이 되는 두수.
2의 보수관계 → 2진수로 두수를 더했을 때 0이 되는 두수.
10의 보수관계: 7 + 3 = 10, 5 + 5 = 10, 1 + 9 = 10 
2의 보수관계: 5 + -5 = 0000, 1 + -1 = 0000

이 처럼 서로 2의 보수관계에 있는 두 2진수로 5와 -5처럼 절대값이 같고 부호가 다른 두 10진수를 표현하는 것을 2의 보수법이라고하며, 현재 대부분의 시스템이 2의 보수법으로 부호있는 정수를 표현한다.


음수를 2진수로 표현하기

10진 음의 정수를 2진수로 변환하려면, 먼저 10진 음의 정수의 절대값을 2진수로 변환한다. 그 다음에 이 2진수의 2의 보수를 구하면 된다. 예를 들어 -5의 2진 표현을 구하는 과정은 다음과 같다.

위의 방법은 부호가 다르고 절대값이 같은 두 정수의 2진 표현이 서로 2의 보수 관계에 있다는 것을 이용한 것으로 복잡해 보이지만 간단하다. 절대값은 부호만 떼어내면 되고, 10진수를 2진수로 변환하는 방법은 이미 배웠고, 2의 보수로 변환하는 방법도 쉽다. 이미지의 마지막 2의 보수가 음수의 2진수값이 된다. 그러므로 -5 → 1011(2)


2의 보수 구하기

서로 2의 보수의 관계에 있는 두 수를 더하면 0(자리올림 발생)이 된다. 예를 들어 2진 수 0101의 2의 보수를 구하려면 0101에 어떤 수를 더하면 0이 되는지 알아내야 한다.

?에 들어갈 2의 보수가 어떻게 될까?

0101(2)을 0000(2)으로 만들려면 정말 간단하다 1011(2)이 된다. 1011(2)는 10진수로 11가 된다. 뺼셈으로 2의 보수를 간단히 구할 수 있지만 자리수가 많아지면 뺼셈도 쉽지 않다. 뺼셈의 방법은 넘어가도록하자.

다행히 뺼셈보다 2의 보수를 더 간단히 구하는 방법이 있다. 1의 보수를 구한다음 1을 더한다. 그러면 2의 보수를 구할 수 있다.

2의 보수 = 1의 보수 + 1

1의 보수는 0을 1로, 1을 0으로만 바꾸면 되므로 구하기 쉽다. 예를 들어 2진수 0101의 1의 보수는 1010이다 여기에 1을 더하기만 하면 2의 보수가 된다.

길게 설명했는데 다 이해하지 못해도 괜찮다. 아래의 내용만 확실히 기억하자. 음수의 2진 표현은 구하는 방법
음수의 2진 표현은 구하는 방법
1. 음수의 절대값을 2진수로 변환한다.
→ -5의 절대값인 5를 2진수로 변환한다. 10진수 5를 2진수로 변환하면 0101(2)이다.
2. (1)에서 구한 2진수의 1을 0으로 0은 1로 바꾼다. (1의 보수 구하기) → 0101이 1010이 된다
3. (2)의 결과에 1을 더한다.(2의 보수 구하기. 1의 보수 + 1) → 1010에 1을 더하면 1011이 되고, 이것이 -5의 2진 표현이다.

'Java' 카테고리의 다른 글

Java 기본형 5  (0) 2021.06.02
Java 기본형 4  (0) 2021.06.01
Java 기본형 3  (0) 2021.05.31
Java 기본형 2  (0) 2021.05.30
Java 기본형  (0) 2021.05.29