[C언어] 컴퓨터는 수학 덧셈만 존재한다.
컴퓨터는 사칙연산 중 오로지 덧셈만 할 수 있습니다. 뻴셈, 곱셈, 나눗셈이란 것은 없습니다. 하지만 덧셈, 뺄셈, 곱셈, 나눗셈으로 사칙연산을 하고 있습니다. 그러면 어떻게 뺄셈, 곱셈, 나눗셈으 수행 하는 것일까요. 바로 보수를 이용하여 뻴셈을 할 수 있게 되고 덧셈과 뺄셈으로 곱셈과 나눗셈을 할 수 있게 됩니다. 그러면 덧셈을 가지고 어떻게 사칙연산을 수행하는지 알아보도록 하겠습니다.
1. 컴퓨터의 덧셈
컴퓨터는 전자기기로 전기를 이용하여 신호를 만들어 냅니다. 전기 신호는 +, - 전류 상태만 존재하고 이 상태를 수학적으로 1과 0의 단위로 표현을 할 수 있습니다.
위 그림의 전구 처럼 전류가 1과 0의 상태로 전류가 흐르거나 안흐르거나 두가지 상태만 존재하기 때문에 전류에 음수가 존재할 수가 없습니다. 그래서 컴퓨터는 수학적 계산을 1 or 0으로 표현을 해야 하기 때문에 오로지 덧셈만 존재하지요.
그러면 어떻게 컴퓨터에서 뺄셈, 곱셈, 나눗셈을 할 수 있는 걸 까요. 바로 덧셈 하나로 뺄셈, 곱셈, 나눗셈을 수행 할 수 있습니다. 그러면 덧셈이 어떻게 뺄셈을 수행햐는지 알아보도록 하죠.
2. 덧셈을 가지고 뺄셈 하기
뺄셈은 덧셈을 가지고 계산 할 수 있습니다. 그 계산법은 음수에 대해 보수를 취하는 방법으로 뺄셈의 계산을 수행 할 수 있습니다.
예)
5-3 => 5 + (-3)
위 예처럼 -3에 대한 보수를 취해서 -3(보수)와 5를 덧셈하여 계산하게 됩니다.
여기서, 보수는 어떻게 사용하는지 알아야 겠죠. 보수는 1의 보수의 2의 보수로 나눌 수 있습니다. 보수에 대해 논하기 전에 숫자의 표현을 먼저 알아야 합니다.
간단히 살펴보면, 숫자는 1과 0으로 구성된 8bit로 표현 할 수 있습니다.
3 => 00000011
이렇게 표현 된 수는 아래와 같이 진수로 불리웁니다.
3 => 10진수
0000 0011 => 2진수
원래 더 깊게 진수변환까지 들어가야 하는데 생략 합니다.
1의 보수
- 1을 0으로 0을 1로 바꾸는 것을 1의 보수라 함
- 1의 보수인 수를 더하여 최상위비트의 자리올림이 나오면 1을 더하고 자리올림이 없으면 1의 보수를 취한 후 (-)부호를 붙임
예) 5 - 3 = 2
0000 0101 => 5
-3의 1의 보수를 구해 봅시다.
0000 0011 => 3
1111 1100 => -3(1의보수)
0000 0101 => 5
1111 1100 => -3
-------------
1) 0000 0001 => 최상위비트 1
0000 0001
+ 0000 0001
--------------
0000 0010 => 2
예) 2 - 3 = -1
0000 0010 => 2
1111 1100 => -3(2의보수)
---------------
1111 1110
자리올림이 없음으로 결과를 1의 보수를 취한 후 (-)을 붙인다.
1111 1110
---------------
0000 0001 => (-)1
2의 보수
- 1의보수를 취한 후 +1을 더함
- 2의보수인 수를 더하여 최상위비트의 자리올림이 나오면 무시하고 마무리 하고 자리올림이 없으면 다시 2의 보수를 취한 후 (-)부호를 붙임
예)
5-3 => 5 + (-3)
예) 5 - 3 = 2
0000 0101 => 5
-3의 1의 보수를 구해 봅시다.
0000 0011 => 3
1111 1100 => -3(1의보수)
+0000 0001
-------------- -
1111 1101 => -3(2의보수)
0000 0101 => 5
1111 1101 => -3
-------------
1) 0000 0010 => 최상위비트 1
0000 0001
+ 0000 0001
--------------
0000 0010 => 2
예) 2 - 3 = -1
0000 0010 => 2
1111 1101 => -3(2의보수)
---------------
1111 1111
자리올림이 없음으로 결과를 2의 보수를 취한 후 (-)을 붙인다.
0000 0000
+ 0000 0001
--------------
0000 0001 => (-)1
이렇게 해서 뺄셈을 덧셈으로 계산 할 수 있습니다.
3. 곱셈과 나눗셈
곱셉은 더하기로 나눗셈은 보수를 취해 더하기로 계산을 수행합니다.
곱셈
곱셈은 곱의 수만큼 더하면 됩니다.
예)
3 x 3 => 3 + 3 +3 =9
나눗셈
나눗셈은 보수를 취하고 나누는 수만큼 더하면 됩니다.
예)
9 / 3 = 3 => 몫
9 + (-3) + (-3) + (-3) = 0 => 나머지
원래는 곱셈과 나눗셈을 비트 변환 시켜서 풀이해야 하는데 설명이 길어지는 간단히 의미만 전달합니다.
마무리
컴퓨터는 뺄셈이 존재하지 않고 단지 덧셈만 존재하고 그 덧셈을 가지고 뺄 수를 보수로 변환 시켜 더하여 뺄셈을 수행 합니다. 한마디로 덧셈하나로 사칙연산을 전부 다 수행한다고 생각하시면 됩니다. 원래는 이걸 이해하기 우해서는 진수에 대해 먼저 알아야하고 진수변환을 시킬 수 있어야 하고 그 개념을 가지고 진수 연산을 수행 할 수 있어야 합니다. 단지 오늘 post는 의미 전달 psot로 간단히 정리 했네요.
감산기 회로 만드는 것보다 보수기를 만들어 더하기, 빼기를 가산기 회로에서 처리하는 컴퓨터공학의 정수...!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
덧셈 하나로 사칙연산을 수행한다는 것이 처음 배울때 신기하고 재미 있었죠.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
짱짱맨 호출에 응답하였습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
짱짱맨 방문 감사해요
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
여기서는 이런것도 배울 수 있군요. 코딩은 쉽지 않은데 이런 이야기는 쉽게 이해할 수 있게 가르쳐 주셨군요. 감사합니다. 잘 배웠습니다.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
kr-dev 태그쪽으로 검색하시면 더 많은 것을 배우실 수 있을 거에요.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
와 정말 신기합니다. ㅎㅎㅎㅎㅎㅎ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
에이! 아시면서요.
컴퓨터일반 과정에서 처음 입문 기초 배울 때 나온 내용이지요.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
정말 몰랐습니다. ㅎㅎ 가산기랑 반가산기에 대해서는 배웠는데요. 수업에는 있었을 것 같은데 그냥 넘어간듯요. 덧셈 하나로 다하는 거 제대로 배웠네요. 고맙습니다. ㅎㅎ
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit