2의 보수가 왜 뺄셈이 되는지에 대해서 설명이 없어서 작성한다.
일단, 보수에 대해서 설명한다.
보수란, 뒤에서 셀라는 것. 이다.
여기서 조건은 1의 자리 수 만 가지고 이야기를 한다.
쉽게 말해서 10의 보수에서 4라는 것은. 10에서 4까지 가지는 갯수이다.
그래서 10진수에서 4를 10의 보수로 셀라면, 6이 된다.
7일 경우엔, 3이된다.
쉽게 말해서 어떤 수 A라는 게 있다면, 그 수가 10이 되기 위해서 필요한 값을 뜻한다.
9의 보수는 10의 보수에서 1이 모자란 보수를 뜻한다.
예) 12389273에 대한 10의 보수
100000000 - 12389273 = 87610727
윗 방법은 10진법일때 이야기를 하는 것이다.
여기서 자세히 이야기를 하자.
일단, 필드(현 세계에서 존재하는 모든 집합; 모집합)에서 수를 표현하기 위해서 다양하게 찾아 다녔다.
여기서 부분집합 S={0,1,2,3,4,5,6,7,8,9}으로 모든 수를 표현하자. 라고 나온 것이 우리가 알고 있는 아라비아 숫자이자, 10진법이다.
2진법은 off/on을 표현할 수 있는 필드에서 최소 단위 부분 집합으로 표현한 것이다. 그래서 컴퓨터가 2진수를 가지고 모든 숫자를 사용하는 것이다.(이것은 컴퓨터 기초에 대한 책을 보면 자세하게 설명되어 있다.)
이제, 왜 2의 보수이 뺄 수 있는가? 에 대한 이야기를 해보자. 그리고 왜 0이 중요한지 이야기 한다.
예을 들어서 1byte을 가지고 이야기하자.
1byte로 표현할 수 있는 수 들의 순열 집합 S = {0,1,2,3,4,5,6,...127,128,129,...255}가 된다.
우리는 덧셈을 위해서 2개의 원소를 S에 추출하고 그것 덧셈 연산한 후에 다시 S집합에 들어간다. 라는걸 알고 있다.(이걸 수학적 용어로 '덧셈에 닫혀있다.' 라고 한다.)
즉, 체. 라는게 만족을 한다.
수식으로 적어내면 다음과 같다.
a+b=c (a,b,c∈S)
라고한다.
예) 닫혀있다.
232 + 12 = 244
닫혀있지 않다.
252 + 12 = 264 (264∈S에 만족하지 않으므로 닫혀있지 않다는 뜻이다.)
공식을 좋아하는 우리나라에서(고등학생에게 정의를 공부하라고 알려주니깐 공식을 하나라도 더 외우겠다. 라고 말하는 밝은 미래가 있는 우리나라를 위해서) 정확한 공식을 적어 준다면,
(a+b)Mod[n(S)] = c (a,b,c∈S, n(S)는 집합 원소의 갯수, a Mod b 란, a를 b로 나눈 나머지)
라는 공식이 된다.
윗 공식에 맞춰서 하면, 어떤 수를 S에 가지고와도 결과는 S 집합에 포함된다.
즉, 덧셈 연산에 닫혀 있게 된다.
그리고 뺄셈이 될 수 있는걸 더 이해하기 위해서 덧셈의 공리가 필요하다.
덧셈의 공리
1. 교환 법칙 : a+b=b+a=c (a,b,c∈S)
2. 결합 법칙 : ca+cb=c(a+b) (a,b,c∈S)
3. 항등원 : a+b=b+a = a (a,b∈S)[여기서 b는 항등원. 이라고 한다.]
4. 역원 : a+b=b+a = c (a,b,c∈S, c는 항등원)[여기서 a는 b의 역원, b는 a의 역원. 이라고 한다.]
여기서 집합의 원소 0. 항등원이 있어야지 덧셈의 역원을 얻을 수 있다.
역원은 우리가 말하는 정수 4와 -4라는 양수/음수를 만들어내는 개념이다.
그래서 0은 수학적으로 의미가 있다.(역원을 만들고, 수를 늘리고, 자리수 개념을 사용할 수 있게 된다.)
그럼, 왜 2의 보수를 하면, 역원이 얻어지는가? 에 대한 설명이 필요할 것이다.
그것은 닫혀 있는 형태를 보면 이해가 될 수 있다.
2의 보수. 즉, 뒤에서 셀라게 되는 값을 가지고 오게 되면, 그 수는 역원이 된다.
예)
(232+b)Mod(256) = 0
256+0 = 232+b(Q*M+N = A이라는 나눗셈 공식)가 되고, b는 24가 되고 232의 역원이 되는 것이다.
이 결과들을 가지고 정수(양수/음수)을 표현하는 것이다.
예을 들어서
1byte에서 82의 역원은 unsigned(부호 없음)에서 174라는 값이 된다.(정수로 말하면, 82의 역원이 -82이다.)
그래서 부호화된 변수론 127 다음에 -128, -127, -126... 이렇게 넘어간다.
그러면, 1의 보수를 거친 후에 +1을 사용하여 계산하는가?
2의 보수로 바로 처리할 수 있으면 되지 않겠는가?
그 이유는 전자회로에 대해서 생각하면된다.
1의 보수를 거치지 않고 한 번에 2의 보수를 사용할려면 감산을 거쳐야된다.(전자회로로 2의 보수를 쉽게 계산할 수 없다.) 하지만 1의 보수는 딱 1개의 회로를 거치면 완성이 된다.
그것은 Not Gate을 거치면 된다.
거기에 가산 회로를 2번 돌리는게 2의 보수를 바로 계산하여 가산회로를 돌리는 것보다 더 회로적으로 간편하기 때문에 사용되는 것이다.
'연습' 카테고리의 다른 글
알파고와 이세돌 9단의 대국이 사기? 웃기고 있네! (1) | 2016.03.12 |
---|---|
adb Keyboard -ADB로 UNICODE 입력하기- (1) | 2016.01.12 |
7z 사용법 - CRC 및 CheckSum 명령어 - (0) | 2015.12.05 |
Android Youtube API - 2. Youtube API을 이용한 플레이어 실행 시키기 - (0) | 2015.12.04 |
Android Youtube API 사용하기 - 1. 안드로이드 Youtube API Key 생성. - (0) | 2015.12.03 |