일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 2진법의음수표현
- 멤버변수
- java
- 객체지향
- 의사난수
- 클래스
- 2의보수
- 컴퓨터구조
- 전역변수
- Math.random()
- 자바
- random클래스
- 변수의초기화
- 부호절댓값
- 1의보수
- 멤버메소드
- 2진법음수표현
- random()
- 멤버변수의초기화
- 2진법음수
- 난수발생
- JAVA프로그래밍
- 객체지향언어
- 난수
- static
- 멤버필드
- 자바프로그래밍
- 지역변수
- 클래스멤버
- new연산자
- Today
- Total
주인장의 프로그래밍 개발 공부방
[Chapter 7 컴퓨터 구조] 3. 2진법의 음수 표현 (3편 - 심화 내용) 본문
앞에서 다양한 음수 표현 방법을 알아보면서
2의 보수가 컴퓨터에서 음수를 표현하는데 얼마나 잘 어울리는지에 대해서 이해했으리라 믿는다.
이번 편에서는 앞서 미처 설명하지 못한 부분들에 대해서
언급하고 좀 더 자세히 설명할만한 부분들에 대해서 알아보는 편으로 작성한다.
1. 컴퓨터는 덧셈 밖에 할 줄 모른다.
1편에서도 언급했지만 컴퓨터의 산술 논리 장치(ALU)는 가산기로 구성되어 있고 덧셈만 연산할 수 있는 기계이다.
그렇기 때문에 뺄셈이라는 로직 자체를 구현한 것이 아닌
음수를 표현하는 방식을 채택함으로서 덧셈만으로 뺄셈도 할 수 있게 된 것이다.
이러면 논리회로를 설계함에 있어서도 복잡 다양한 논리회로 구조보단
조금이라도 더 단순한 논리회로 설계가 가능한 것이다.
이것이 수학에서의 보수라는 개념으로 컴퓨터에서 음수를 표현하게 된 이유이며,
그 중에서도 가장 효과적인 2의 보수로 음수를 표현하게 된 것이다.
2. 보수의 의미를 좀 더 명확하게
2편에서 소개한 보수의 정의는 사실 많은 부분을 함축한 상태라서
여러 부분에서 가려져 있는 것들이 있어, 이 기회에 조금이라도 더 자세하게 알아보고자 한다.
물론 필자도 지식이 부족하여 여러 군데에서 십시일반 정보를 모으고 정리해서 쓰는 것이라
두서없이, 부족한 부분 등이 있을 수도 있으니 이해해주길 바란다.
일단 본론으로 들어가기 전에 아래의 블로그의 글을 꼭 한 번 정독해주길 추천한다.
이번에 보수 표현과 관련해서 정보를 찾던 중에 설명이 잘 된 글을 발견해서 분명히 도움이 될 것이라고 생각한다.
https://fotc.tistory.com/entry/%EC%9D%8C%EC%88%98%EC%9D%98-%EB%B3%B4%EC%88%98%ED%91%9C%ED%98%84
앞서 보수란
"보충해주는 수, 합해서 특정 숫자를 채우게 하는데 필요한 수"
라고 정의했는데 우리는 여기에서 수학적으로 좀 더 자세하게 알아볼 필요가 있다.
위키백과에서 보수 (수학)에 대해서 검색해보면
보수를 이용한 계산법
주판을 이용한 덧셈, 뺄셈을 할 때 5의 보수 혹은 10의 보수의 개념이 사용된다.
예를 들면 4+2를 계산할 때 +2를 4에 대한 5의 보수 1을 먼저 더한 뒤 1을 추가로 더했다고 이해할 수 있다.
즉, 처음의 수 4에 5의 보수 1을 더해서 5를 만든 뒤 나머지 1을 더해서 6이 된다고 간주할 수 있다.
이는 뺄셈일 때도 마찬가지인데, 7-3이라는 연산에서도 7=5+2로 나눌 수 있고,
2-3은 결과가 음수가 나오기에 우선 5에 대한 3의 보수 2를 구한 뒤 남은 숫자 2를 더한 값 4를 결과로 유도할 수 있다.
이런 부분을 확인할 수 있다.
우리가 눈여겨 볼 부분은 뺄셈을 하는 부분인데 글로만 읽었을 때는 잘 이해가 안 될 수도 있으니
이번에도 예시를 통해서 알아보자.
예시 1)
10진수를 바탕으로 8 - 3을 계산해보자.
그런데 뺄셈이 아니라 덧셈만으로 결과를 도출해 볼건데
여기에 보수라는 개념을 도입하면 뺄셈을 덧셈으로 바꿔서 계산이 가능해진다.
먼저 -3을 바꿀건데
=> +10 -3 -10
으로 바꿀 수 있을텐데
보수로 변환하는 방법을
"어떤 수에 합해서 해당 진법의 밑수로 만듦"
을 바탕으로 밑수인 10을 이용해 위의 식으로 변환한 것이다.
여기에서 -10은 일단 제쳐두고
예시 1)을 변환하면
8 + (10 - 3)으로 바꿀 수 있고
8 + 7 = 15로 결과를 낼 수 있다.
그리고 잠시 제쳐두었던 -10까지 계산해주면
15 - 10 = 5로
8 - 3 = 8 + (10 - 3) - 10 = 5
라는 결과를 얻을 수 있다.
여기에서 10 - 3 - 10이라는 식을 통해 보수의 공식을 얻을 수 있는데
$$ a^{n}-b-a^{n} $$
(a : 밑수, n : b보다 큰 자릿 수, b : 보수를 취하는 수)
로 표현할 수 있다.
그런데 위의 공식과 예시 1)의 풀이를 찬찬히 살펴보면
2의 보수가 어떻게 계산이 되는건지 왜 계산 후에 캐리 값을 무시할 수 있는지 이제는 이해가 될 것이다.
우리가 2의 보수를 알아볼 당시에 보수를 이렇게 정의한 적이 있다.
"어떤 수에 합해서 (해당 진법의 밑수로 만들어 "오버플로우"를 시킨 후) 0으로 만들어주는 수"
이는 $$ a^{n}-b $$, 즉, 10 - 3을 통해 3의 10의 보수를 구한 것이고,
보수를 이용해 계산한 후 다시 - 10을 함으로서 자릿 수를 넘어가는 캐리 값이 발생하더라도
자연스럽게 무시될 수 있는 것이다.
그리고 또 한 가지, 위의 인용글에서 언급된 내용으로
지금까지 보수를 말할 때 "3의 10의 보수를 7"이라고 표현했는데
더 정확히는 "-3의 10의 보수는 7"이라고 표현해야 한다는 것이다.
인터넷에서 2의 보수와 관련해서 검색하다보면 한 번 쯤은 볼 수 있는 그림이 있는데
그림 1)
보통은 원으로 다들 그렸을 테지만 필자는 귀차니즘으로 인해 마름모로 그렸다.
어쨌든 위의 그림 1)을 보면 1000 (2)부터 1111 (2)까지 음수로 표현하고 있고
이는 각각의 보수관계를 시각적으로 표시해주고 있는 것이다.
표로 바꿔보면 다음과 같다.
4비트의 수로 표현했기에 밑수는 16이 되고 이를 가지고 음수로 바꾼 후,
MSB가 0을 양수, 1을 음수로 표현하면 그림 1)과 매칭이 되는 것을 알 수 있다.
그렇다면 보수를 말할 때 3의 보수가 아니라 -3의 보수라고 하는 것이 정확하단 이유는
컴퓨터에서는 음수를 표현할 수 없기 때문에 보수라는 개념으로 양수를 음수처럼 사용하고 있는 것이다.
다시 말해, 양수의 보수표현은 할 수 없고 음수의 보수 표현만이 존재한다는 뜻이기도 하다.
물론 컴퓨터 구조에서 말이다.
3. 마무리
세 편의 긴글을 보면 조금은 정리되지 않고 장황하게 써놓은 것처럼 보일 수도 있을 것 같다.
물론 나도 여느 다른 글들처럼
1의 보수로 어떻게 바꾸고, 2의 보수로 어떻게 바꾸는지에 대해서만 적었으면 편했겠지만
이번 글을 작성하면서 가장 먼저 생각했던 부분은
하나의 내용을 다루더라도 시험공부마냥 핵심 내용만 전달하는 것이 아니라
정의에 대해서도 정확하게 상세한 내용을 전달함과 동시에
함축되어 있거나 복잡하게 되어 있는 부분을 최대한 풀어내고
'왜 이렇게 바뀌는건지', '왜 이런 의미인지', '왜 사용하는 것인지'처럼
의문점이 생길만한 부분을 최대한 많이 다뤄서
잘 모르는 사람이 이 글을 읽었을 때 개념을 이해하는데 조금이라도 더 도움이 되고 기억에 남았으면 하는 점이었다.
그러다보니 내용이 장황하게 길어진 부분도 있었고 어떨 때는 두서없이 진행된 부분도 있을 것이라 생각한다.
그리고 필자도 지식이 부족하다보니 수많은 정보들을 나름대로 정리하고 개인적인 생각으로 해석한 부분도 있어서
틀린 부분도 있지 않을까하는 걱정도 있다.
(오히려 내 스스로 공부를 더 많이 하게 된 것 같아서 그런 부분에서 위안을 삼고 있다.)
그렇다해도 2진법의 음수표현, 1의 보수, 2의 보수를 검색해서 우연히 들어온 사람이
이 글을 읽고 나서 머릿 속에서 조금이라도 정리가 잘 되어서
더 많은 지식을 얻어갔으면 하는 바람이 있다.
끝.
※ 혹시라도 잘못된 내용이나 부족한 부분, 또는 의문이 드는 부분이 있다면
댓글 등으로 알려주시면 수정 및 보강할 수 있도록 노력하겠습니다.
부족한 글 읽어주셔서 감사합니다.
인용 출처 : https://fotc.tistory.com/entry/%EC%9D%8C%EC%88%98%EC%9D%98-%EB%B3%B4%EC%88%98%ED%91%9C%ED%98%84
'프로그래밍 기본 지식 > Chapter 7 컴퓨터 구조' 카테고리의 다른 글
[Chapter 7 컴퓨터 구조] 2. 2진법의 음수 표현 (2편 - 1의 보수, 2의 보수) (0) | 2022.09.14 |
---|---|
[Chapter 7 컴퓨터 구조] 1. 2진법의 음수 표현 (1편 - 부호 절댓값) (1) | 2022.09.13 |