보수 기초 개념 익히기: 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, 시멘틱) 이란? (0) | 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 |