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

[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

H2
H3
H4
Upload from PC
Video gallery
3 columns
2 columns
1 column
9 Comments