2013. 10. 1.

컴퓨터는 덧셈밖에 못 하는 바보? 사칙연산의 비밀


컴퓨터에도 영혼이 있다면 단언컨대 컴퓨터는 덧셈밖에 모르는 바보입니다. 


사람들은 스마트폰을 들고 다니며 웹서핑도 하고 게임도 하고 스마트한 삶을 살고 있습니다. 하지만 스마트한 그 스마트폰이 사실 덧셈밖에 못 한다는 사실!


컴퓨터의 숫자표현


우리가 흔히 사용하는 숫자는 0~9 숫자를 사용합니다. 이것을 10종류의 숫자로 수를 나타낸다고 ‘십진법’이라고 하는데요, 컴퓨터는 0과 1 두 가지 종류의 숫자로 수를 나타내는 ‘이진법’을 사용합니다.


흔히 ‘컴퓨터는 0과 1밖에 모르는 바보!’라고 표현하기도 하죠. 10진법으로 123이라는 숫자는 아래 표와 같은 의미로 표현할 수 있습니다.


102 (100)

1개

101 (10)

2개

100 (1)

3개


그러면 같은 123을 2진법으로 표현하면 아래와 같습니다.


1111011


26 (64)

1개

25 (32)

1개

24 (16)

1개

23 (8)

1개

22 (4)

0개

21 (2)

1개

20 (1)

1개


우리가 123이라고 입력하면 컴퓨터는 1111011이라고 알아듣는 것이죠!


# 왜 컴퓨터는 0과 1로 표현 할까요?

  그것은 컴퓨터 하드웨어를 제어할 때 사용하는 전기와 관련 있습니다.

  전기적신호가 있으면 1이고 없으면 0으로 표현하기 때문이죠.

  단순히 전기가 있다, 없다만 표시해 주기 때문입니다.



컴퓨터의 사칙연산


그러면 컴퓨터의 덧셈을 알아보겠습니다. 십진법에서 1+1=2입니다만, 이진법 즉 컴퓨터가 사용하는 덧셈법은 1+1=10입니다. 두 번째 자리는 2¹이니까 2가 1개 있다는 것이죠.


컴퓨터는 덧셈밖에 못 한다고 했는데 그러면 뺄셈은 어떻게 할까요? 


그전에 컴퓨터는 음수를 어떻게 표현하는지 알아보도록 하죠. 0과 1로 나타낼 수 있는 한 자리를 1bit(비트)하고 합니다. 그것이 8개가 모이면 8bit라고 하는 1octet(옥텟)이라고 하는데 이것을 보통 1byte(바이트)라고 표현합니다. 4bit는 nibble(니블)이라고 하는데요, 4bit 기준으로 설명하겠습니다.


0

1

1

1


이렇게 4bit가 있으면 2진수로 7을 표시한 것이죠.


1

0

0

0


그러면 위에 7에서 1을 더한 후 나온 값은 1000입니다.

2진수 1000은 10진수로 바꾸면 숫자 몇일까요?

답은 -8입니다.


7+1=-8

오잉????????????


7에서 1을 더했는데 왜 -8이 되나요? 


이미지 출처: KBS 개그콘서트


4bit는 0~15의 수를 표시할 수 있습니다. 1000에서 제일 왼쪽에 있는 1을 부호비트라고 부릅니다. 부호비트가 0이면 양수를 나타내고 1이면 음수를 나타내는 것이죠.


그러면 부호비트(1bit)를 제외하면 000~111의 수를 표현 할 수 있겠죠? 111은 22x1+21x1+20x1=7입니다. 즉 -7~+7까지의 수를 표시할 수 있겠네요! 눈치채신 분들도 있겠지만 -7, -6 , -5 … 5, 6, 7 총 15개의 수를 표시할 수 있습니다. 그러나 4bit는 0~15까지의 총 16개의 숫자를 표시할 수 있는데 15개밖에 표시할 수 없네요? 잃어버린 1개의 정체는 무엇일까요?


@_@ 머리 아프실 테니 정답을 빠르게 공개하겠습니다!

바로 -0과 +0입니다.


0이면 0이지 -0과 +0이 어디 있습니까!

그래서 컴퓨터가 바보라는 것입니다. 하나하나 가르쳐 줘야 하거든요 ㅜ_ㅜ


0

0

0

0


1

1

1

1


두 숫자가 같아 보이십니까?

위에 0000이 +0이고 아래의 1111이 -0입니다.


실제로 두 수는 서로 다릅니다.

1-1=0이다 하고 알려주면 컴퓨터는 -0이냐 +0이냐 물어봅니다.



여태껏 설명했던 방법이 1의보수라고 하는 방법이고 위와 같은 문제 때문에 지금의 컴퓨터 연산은 2의보수를 사용합니다. 2의보수는 1의보수의 결과에 1을 더 더해주는 방법이라고 보시면 됩니다.


그래서 4bit로 표시할 수 있는 수는 -8~+7이고 제일 처음에 7+1=-8이 나왔던 것입니다.


실제로 뺄셈을 한번 해볼까요?

컴퓨터는 빼려는 수를 2의보수를 취해서 더하는 방법으로 뺄셈을 합니다.


<2의보수 표>


10진수: 4–3=1 

2진수: 0100+1101=1 0001 


여기서 우리는 4bit만을 표시 하기 때문에 5bit가 되었지만 젤 왼쪽의 수는 버려집니다. 그러면 남은 0001만이 저장되겠죠? 답은 1입니다.


10진수: 4–6=-2

2진수: 0100+1010=1110


1110을 2의보수표에서 찾아보시면 -2라는 것을 알 수 있습니다.


곱하기와 나누기는 여러 번 더해서 곱하고 여러 번 더해서 나누는 방법으로 할 수 있지만, 시프트(shift)라는 방법으로 계산하지 않고 빠르게 곱하거나 나눌 수 있습니다.


10진수로 설명해드리자면, 


56x10하면 그냥 560하고 뒤에 0을 붙이면 1초도 안 돼 답을 낼 수 있듯이 2진수로 1010x2=10100입니다. 560÷10하면 56이 나오듯이 1010÷2=101이 됩니다.


마치며


컴퓨터가 잘하는 것은 빠른 계산과 반영구적인 기억력입니다. 그리고 시키는 것만 잘합니다. (그래서 시키는 것만 하는 사람은 기계처럼 일한다고 느껴지는 걸까요? -_-;; ) 컴퓨터는 가르쳐 주는 것만 기억할 수 있고 덧셈 밖에 못 하지만 사람은 그렇지 않습니다. 사람은 하나를 가르치면 열을 알 수 있죠~


컴퓨터는 사실 덧셈밖에 모르는 바보라고 폭로하고 나니까 왠지 속이 후련하네요!