[C언어] 컴퓨터는 수학 덧셈만 존재한다.

in #kr-dev5 years ago (edited)

[C언어] 컴퓨터는 수학 덧셈만 존재한다.


컴퓨터는 사칙연산 중 오로지 덧셈만 할 수 있습니다. 뻴셈, 곱셈, 나눗셈이란 것은 없습니다. 하지만 덧셈, 뺄셈, 곱셈, 나눗셈으로 사칙연산을 하고 있습니다. 그러면 어떻게 뺄셈, 곱셈, 나눗셈으 수행 하는 것일까요. 바로 보수를 이용하여 뻴셈을 할 수 있게 되고 덧셈과 뺄셈으로 곱셈과 나눗셈을 할 수 있게 됩니다. 그러면 덧셈을 가지고 어떻게 사칙연산을 수행하는지 알아보도록 하겠습니다.

1. 컴퓨터의 덧셈


컴퓨터는 전자기기로 전기를 이용하여 신호를 만들어 냅니다. 전기 신호는 +, - 전류 상태만 존재하고 이 상태를 수학적으로 1과 0의 단위로 표현을 할 수 있습니다.

a1.jpg

위 그림의 전구 처럼 전류가 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로 간단히 정리 했네요.


Sponsored ( Powered by dclick )

dclick-imagead

Sort:  

감산기 회로 만드는 것보다 보수기를 만들어 더하기, 빼기를 가산기 회로에서 처리하는 컴퓨터공학의 정수...!

덧셈 하나로 사칙연산을 수행한다는 것이 처음 배울때 신기하고 재미 있었죠.

짱짱맨 호출에 응답하였습니다.

짱짱맨 방문 감사해요

여기서는 이런것도 배울 수 있군요. 코딩은 쉽지 않은데 이런 이야기는 쉽게 이해할 수 있게 가르쳐 주셨군요. 감사합니다. 잘 배웠습니다.

kr-dev 태그쪽으로 검색하시면 더 많은 것을 배우실 수 있을 거에요.

와 정말 신기합니다. ㅎㅎㅎㅎㅎㅎ

에이! 아시면서요.
컴퓨터일반 과정에서 처음 입문 기초 배울 때 나온 내용이지요.

정말 몰랐습니다. ㅎㅎ 가산기랑 반가산기에 대해서는 배웠는데요. 수업에는 있었을 것 같은데 그냥 넘어간듯요. 덧셈 하나로 다하는 거 제대로 배웠네요. 고맙습니다. ㅎㅎ

Coin Marketplace

STEEM 0.20
TRX 0.13
JST 0.029
BTC 67467.65
ETH 3470.01
USDT 1.00
SBD 2.71