보수 기초 개념 익히기: n 의 보수란?
n진수를 표현할 때n의 제곱이 되기 위해 더해주는 수
10 진수로 예제 들어보기
13에 대한10의 보수는87이다.- 가장 가까운
n의 제곱이100이다.
- 가장 가까운
133에 대한10의 보수는867이다.- 가장 가까운
n의 제곱이1000이다.
- 가장 가까운
n-1 의 보수 구해보기
n-1의 보수는n의 보수에서1을 빼면 된다.- 즉,
133의9의 보수는866이다.
n-1 의 보수는 왜 구하는가?
n-1의 보수를 구하는 법은 알겠는데 왜 구하는지에 대한 감을 잡긴 어렵다.8진법에서423(8)의8의 보수를 구하려면 어떻게 해야 할까?1000(8)=423(8)+x(8)여기서x를 구해야 한다.- 여기서 우리는 자릿수의 변화와 또 익숙치 않은
8진수라는 숫자를 다루게 되어 머리가 복잡해진다. 더 쉽게 구하는 방법이 없을까? n-1의 보수를 구하면 더 쉽다.777(8)-423(8)을 하면 된다. 마치10진수처럼 계산할 수 있어서10진수를 써온 인간에게 훨씬 친숙한 계산이 가능하다.354(8)이 나온다.- 우리가 구한 것은
n-1의 보수이니 이것은7의 보수이다.
- 우리가 구한 것은
- 여기서
1을 더해주면 우리가 얻고싶어 했던8의 보수가 나온다.355(8)
즉, 인간이 다양한 진법의 n 의 보수를 더 쉽게 구하려고 n-1 의 보수를 쓰게 된다.
2의 보수란?
- 2진수에서 한정된 비트로 부호가 있는 수를 표현할 때 사용하는 도구이다.
- 맨 앞의 비트를 부호로 사용한다.
0:양수, Positive,1:음수, Negative
2의 보수 표현 범위 구하기
- 부호가 있는 숫자 데이터에서 음수를 표현하기 위해 주로 사용한다.
- 2의 보수를 이용해 회로를 간단하게 만들 수 있기 때문이다.
n 비트를 가진 데이터 타입에서 음수를 표현하는 방식
4비트로 숫자를 표현한다고 가정하면,0000~1111까지 숫자를 표현할 수 있다.- 총
16가지 종류의 숫자 표현이 가능하다. - 0과 양수는
0~7까지의 8개의 범위를 갖는다. - 음수는
-1~-8까지의 8개의 범위를 갖는다.- 이 음수 범위를 2의 보수로 표현한다.
- 총
4비트에서 2의 보수 양수 표현하기
- 양수는 일반적인 2진수와 똑같이 표현하면 된다.
7을 표현하고 싶다면0111이다.
4비트에서 2의 보수 음수 표현하기
- 음수에서
7을 표현하고 싶다면 2진수7에서1의 보수를 구하고+1을 하면 된다. 0111: 71000: 7의 1의 보수1001: 7의 2의 보수1001이-7을 표현하게 된다.- 그런데 2의 보수로 표현된
1001이-7인 것을 알고 싶다면, 다시 2의 보수를 역산해야 한다. 1001->0110->0111이렇게-7인 것을 알 수 있다.
2의 보수를 이용해 숫자 더해보기
2의 보수로 음수를 표현하는 것의 장점은 회로에서 덧셈만 구현하면 뺄셈까지 구현이 가능하다는 점이다.
0 이 나오는 케이스
아래는 3 의 음수인 -3 을 이용해 덧셈으로 뺄셈을 구현한 예제이다. 0 이 나오는 케이스를 먼저 다루는 이유는 결과값을 2의 보수로 역산해보지 않아도 쉽게 맞았다는 것을 알 수 있기 때문이다.
0011(3)1101(-3)0000(0)
0 이 나오지 않는 케이스
0 이 나오지 않는 케이스는 결과의 실제 10진수 값을 알기 위해서 2의 보수로 역산을 한번 해보아야 한다.
0101(5)1001(-7)1110(-2)1110->0001->0010(2)
역산 결과 정답을 올바르게 구한 것을 알 수 있다.
정리
n비트로 숫자를 표현할 때 양수와 음수를 모두 표현하고 싶다면, 보통 음수를2의 보수로 표현한다.2의 보수를 쉽게 구하기 위해서1의 보수를 먼저 구하고+1을 한다.2의 보수를 이용해 음수를 표현하면, 오직 덧셈 회로만을 이용해 뺄셈까지 구현이 가능해진다.
레퍼런스
'용어 (개발용어)' 카테고리의 다른 글
| 프로그래밍 언어에서 말하는 의미론 (Semantics, 시멘틱) 이란? (1) | 2023.03.25 |
|---|---|
| 빅 엔디언 (big endian) 과 리틀 엔디언 (little endian) 이란? (0) | 2023.03.18 |
| IEEE 754 부동소수점이란? (0) | 2023.03.17 |
| 클램프 (Clamp) 란? feat. 컴퓨터 과학, 그래픽스 용어 (0) | 2023.03.15 |
| UTF (Unicode Transformation Format) 인코딩이란? (0) | 2023.03.10 |