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이 됩니다.


마치며


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


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