개발/컴퓨터구조

1의보수와 2의보수, 이 글로 종결내드리겠습니다.

IT의 타이탄 2023. 9. 14. 23:24
SMALL

안녕하세요 IT의 타이탄입니다. 아마 이글에 들어오신 분들은 다음과 같은 고민이 있으셨을텐데요

 

 

"1의 보수를 하는법이 뭐였더라, 2의보수는 또뭐지 두개 방법의 차이가 뭐야 대체"

 

 

해당 고민을 하셨다면 이번 글을 통해서 제가 전부 해결해드리도록 하겠습니다.

 

 

이번 글의 목차는 다음과 같으니 여러분에게 필요한 정보만 찾아가시길 바랍니다.

 

 

[목차]

 

1. 1의보수의 개념 및 계산 방법

 

2. 2의보수의 개념 및 계산 방법

 

 

그러면 1의보수를 하는 방법부터 가르쳐드리도록 하겠습니다.

 

1의 보수 및 2의 보수 개념 및 계산 방법

1. 1의보수 개념 및 방법

1의 보수란, 2진수로 표현되어 있는 양수값을 음수로 바꾸기 위해 사용하는 방법중 하나인데요

 

 

1의보수는 음수로 표현하기 가장 간단한 방법중 하나입니다. 그 이유는 바로 단 한가지만 기억하시면 되기 때문입니다!

 

1로 되어있는 것은 0으로, 0으로 되어있는 것은 1로 바꾼다 (비트를 반전시킨다)

 

즉, 1과0을 반전시키면 1의 보수 계산이 완성이 된것입니다. 예를 들어 설명해드리도록 하겠습니다.

ex) 양수 8의 1의보수를 구하여라. (단, 8을 4bit로 표현해서 진행해라)

8 = 1000(2)

여기서 1의 보수는 1 -> 0 | 0 -> 1 로 바꾸는 것

따라서 8의 1의 보수는 0111(2)입니다.

 

그러나 1의 보수의 문제점은 바로 덧셈, 뺄셈, 나눗셈, 곱셈 등 사칙연산을 하는 과정에서 오버플로우가 발생할 수 도 있다는것입니다.

 

 

오버플로우란 표현할 수 있는 비트를 넘어선 값이 들어왔을 때, 발생하는 에러입니다

 

 

4bit의 경우에는 0~15까지 정수를 담을수 있으며 이 수를 넘어가는 값이 들어오게 되면, 컴퓨터는 오버플로우를 발생시키게 됩니다.

 

 

덧셈에서의 오버플로우 예시를 한번 들어드리도록 하겠습니다.

 

ex) 양수 7과 양수 6의 1의 보수로 음수를 구한후에 각각 구해서 더하여라 (단, 7과 6을 4bit로 표현해서 진행해라)

7 = 0111 (2) -> 1의보수 : 1000(2) = -7
6 = 0110 (2) -> 1의보수 : 1001(2) = -6

두수의 합은 -7+-6 = -13이 나와야한다.

하지만 2진수의 합을 더하면 10001로 4비트로 표현할 수 있는 범위가 초과되어 오버플로우가 된다.

따라서, 해당 두수의 합은 구할 수 가 없다. (오버플로우 발생)

 

이처럼 1의보수의 사칙연산의 한계가 적나라하게 보이기 때문에 컴퓨터 공학자들은 이를 극복한 방법을 찾아내게 되는데요

 

 

그 방법이 바로 2의보수인 것입니다.

 

 

2. 2의보수 개념과 계산 방법

2의 보수란, 1의보수의 한계를 극복한 계산 방법으로 1의보수와 마찬가지로 양수 이진수를 음수 이진수로 표현하는 방법중 하나입니다

 

 

2의 보수의 경우 가장 최상위의 있는 비트를 부호비트로 정하고 부호비트가 1일 경우에 음수 0일 경우에 양수로 표현합니다.

 

 

예를 들어 32bit의 임의의 수가 있을 때, 부호비트를 표현하면 다음과 같습니다.

 

1000 0110 0000 0000 0000 1001 0000 0000
(MSB)                                                                   (LSB)

MSB : Most Significant Bit로 최상위 비트값을 의미하고 2의 보수에선 부호비트를 의미한다.
LSB : Least Significant Bit로 최하위 비트값을 의미한다.

 

2의 보수의 계산방법은 1의 보수에서 +1만 더해주면 되는데요!

 

 

해당 방법을 사용한 예시를 들어보도록 하겠습니다.

 

ex) 3의 2의 보수를 구하시오

3 = 0011 (2)
   => 1100 (2)  # 1의보수를 통해 값 구함
   => 1101 (2)  # 1의보수한 값에 1을 더함
   = -3

 

그렇다면 2의보수의 사칙연산은 1의보수의 한계였던 오버플로우를 극복했는지 확인해봅시다!

 

ex) 양수 7과 음수 6의 2의 보수로 음수를 바꾼후에 각각 구해서 더하여라 (단, 7과 6을 4bit로 표현해서 진행해라)

7 = 0111 (2)
6 = 0110 (2) -> 1의보수 : 1001(2) -> 2의보수 : 1010(2) -6 (1+1이면 0으로 되고 1이 왼쪽으로 넘어간다 : 캐리라고 부름)

0111(2) + 1010(2) = 0001 (2) = 1 (캐리된것은 버려진다.)

 

물론 그렇다해서 2의보수도 오버플로우가 발생하는 경우도 존재합니다. 그렇지만 1의보수보다는 오버플로우라는 경우의 수를 훨씬 더 줄여주니, 2의보수로 계산하는 것을 추천드립니다.

 

 

해당 표를 통해 10진수에 따른 2의보수를 한번 확인헤보시길 바랍니다.

 

10진수 2진수 2의 보수
1 0001 -1 = 1111
2 0010 -2 = 1110
3 0011 -3 = 1101
4 0100 -4 = 1100
5 0101 -5 = 1011
6 0110 -6 = 1010
7 0111 -7 = 1001
8 1000 -8 = 1000

 


 

지금까지 1의보수와 2의 보수를 알아보았는데요. 여러분에게 꼭 도움이 되셨으면 합니다.

 

 

긴 글 읽어주셔서 감사드리고 더 좋은 정보로 찾아뵙도록 하겠습니다

LIST