비트와 바이트

ZoLAist's WikiNote
이동: 둘러보기, 검색

21세기와 컴퓨터 2012년 2학기

[강의노트] 2.1 비트와 바이트

2012년 9월 10일


주요 개념

  • 2진법(binary) : 0과 1이라는 2가지의 숫자의 나열을 통해 수를 표현하는 체계
  • 10진법(decimal) : 0부터 9까지 10가지의 숫자의 나열을 통해 수를 표현하는 체계
  • 16진법 : 0, 1 ... 9, a, b, c, d, e, f 총 16가지의 숫자의 나열을 통해 수를 표현하는 체계
  • 비트(bit) : 하나의 0 또는 1. 디지털 정보의 최소 단위. 하나의 비트로는 2가지 구분되는 내용을 표현할 수 있다.
  • 바이트(byte) : 8비트. 1바이트로는 256가지로 구분되는 내용을 표현할 수 있다.
  • 아스키(ASCII) : American Standard Code for Information Interchange. 수와 문자를 짝지어주는 표로서, ‘A’는 십진수 65에 의해 표현된다. 7비트 ASCII는 128개의 문자를 표현했으며, 이후 256가지의 문자를 표현할 수 있도록 8비트로 확장되었다.


이진법 (10:00-25:00)

컴퓨터의 언어는 2진법이라고 합니다. 이 언어 체계에서는 0과 1밖에 사용하지 않습니다. 놀랍게도 컴퓨터는 그 두 종류의 숫자만으로 음악을 연주하고, 사진을 보여주고, 영화를 보여주며, 문서 작업을 가능하게 해줍니다. 그것이 어떻게 가능한지에 대한 세부적인 사항은 앞으로 계속 알아가게 될 것입니다. 오늘은 그 기본이 되는 이진법에서 시작하려고 합니다.

이진법, 십진법이라는 것은 기본적으로 수를 표현하는 방법입니다. 그러면 십진법 표현인 ‘456’을 생각해봅시다. 이 표현은 단순히 4와 5와 6이 나열되어 있는 것이 아닙니다. 그렇게 나열되어 있는 숫자열이 의미하는 수는 무엇일까요? 네. 사백오십육입니다. 이 표현이 어떻게 사백오십육이라는 수를 표현하는 것일까요? 우리가 6은 1의 자리, 5는 10의 자리, 4는 100의 자리에 있다는 것을 알고 있기 때문입니다. 각 자리는 10의 제곱수를 차례로 표현합니다. 100, 101, 102, 103 ...

십진법에서는 10가지의 숫자를 사용합니다. 무엇부터 무엇까지? 0, 1, 2, ... 7, 8, 9입니다. 그러면 십은 어떻게 표현하죠? 숫자 하나로는 표현 불가능. 그래서 두 자리를 사용해야만 합니다.

7
8
9
10
11

마찬가지로 이진법에서도 자리를 이용해 수를 표현하며, 각 자리는 2의 제곱수를 차례로 표현합니다. 또한 이진법에서는 0과 1 두 가지 숫자만 사용합니다. 자 그럼 이것을 이용해서 수를 작은 수부터 표현해 봅시다.

십진수 이진수
0 0
1 1
2 10
3 11
4 100
5 101

오른쪽부터 1의 자리, 2의 자리, 4의 자리, 그 다음은? 8, 16, 32, 64, 128, 256, ...

바로 각 자리는 2의 제곱수의 자리입니다. 20, 21, 22, 23, 24, ...

  • 테스트
    1. 20을 이진법으로 표현해봅시다.
    2. 65를 이진법으로 표현해봅시다.
    3. 1000001는 십진법으로 몇?
  • 십진법으로 표현된 수를 이진수로 변환하는 간단한 방법은?

비트와 바이트 (25:00-40:00)

자 그럼 ‘비트’란 무엇일까요? 0 또는 1이 쓰여지는 한 자리를 말합니다.

한 비트, 두 비트, 3비트, 4비트, 5비트라는 것은? 자리의 개수를 말합니다.

  • 위에서 0은 몇 비트로 표현되었나요? 1비트
  • 그럼 5는 몇 비트로 표현되었나요? 3비트
  • 그럼 20은 몇 비트로 표현되었나요? 5비트
  • 그럼 65는 몇 비트로 표현되었나요? 7비트

그럼 위와 같은 정보를 담을 수 있는 비트는 기계적으로 어떻게 구현될 수 있을까요? 두 가지 물리적 상태를 가질 수 있는 물리적 장치를 이용하는 것입니다. 가장 간단한 것으로는 무엇이 있을까요? 바로 플래시 불빛입니다. 켜지거나 꺼지는 두 가지 상태를 이용해 1 또는 0을 표현하는 것이죠. 다른 방법은 무엇이 있을까요? 자석의 극성을 이용하는 것입니다. N극의 방향이 ↑일 때와 ↓일 때 각각 1과 0을 표현하는 것이죠. 더 자세한 내용은 나중에 알아보도록 합시다.

다시 비트로 돌아가 봅시다.

  • 그럼 3비트로는 몇 가지의 수를 표현할 수 있나요? 8가지. 0부터 7.
  • 그럼 4비트로는 몇 가지의 수를 표현할 수 있나요? 16가지. 0부터 15.
  • 그럼 6비트로는 몇 가지의 수를 표현할 수 있나요? 64가지. 0부터 63.

그럼 8비트 컴퓨터, 16비트 컴퓨터, 32비트 컴퓨터, 64비트 컴퓨터는 무슨 뜻일까요?

이진법으로 쓰여진 데이터를 끊어 읽는 단위를 말합니다. 8비트 컴퓨터는 8자리씩 끊어 읽는 것이고, 16비트 컴퓨터는 16자리씩 끊어 읽는 것입니다.

  • 8비트 컴퓨터에서 0을 표현하는 데 필요한 비트 수는? 8비트
  • 8비트 컴퓨터에서 95를 표현하는 데 필요한 비트 수는? 8비트

왜 작은 수든 큰 수든 똑같은 단위로 끊어 읽을까요? 이건 낭비 아닐까요?

다음의 숫자열을 생각해 봅시다. 아래의 숫자열은 무엇을 의미할까요?

0100000101110000011100000110110001100101

끊어 읽는 규칙이 없을 경우, 위의 숫자열은 수많은 방식으로 해석될 수 있습니다. 그러한 다양한 해석을 방지하기 위해서는 끊어 읽는 단위가 필요합니다.

01000001 01110000 01110000 01101100 01100101
65 112 112 108 101

8비트씩 끊어 읽을 경우, 위의 숫자열은 5개의 수를 표현하고 있음을 알 수 있습니다.

자 그렇다면 8비트로는 몇 가지의 수를 표현할 수 있을까요? 256가지. 0부터 255.

컴퓨터에서는 보통 이 8비트를 데이터 크기의 기본 단위로 사용합니다. 그 단위의 이름을 아는 사람? 바로 '바이트(Byte)'입니다. 한 번에 무는(bite) 단위를 말합니다. 컴퓨터는 0과 1의 숫자열이 있을 때 이를 하나씩 읽는 것이 아니라 8개씩 물어서 이해합니다.

왜 하필 8비트를 기본으로 채택했을까요? 컴퓨터의 초창기에 알파벳과 여러 특수문자를 표현하는 데 필요한 최소한의 크기로서 채택된 것입니다. 이진수로 알파벳을 표현한다니 그것은 무슨 말일까요? 컴퓨터는 아래와 같은 ASCII 코드를 이용해 8비트 숫자열과 문자 하나씩을 짝지을 수 있습니다.

http://www.asciitable.com/

아스키 코드.gif

1바이트로는 문자 한 개를 표현할 수 있습니다. 2바이트로는 문자 두 개를 표현할 수 있습니다. 3바이트로는 문자 세 개를 표현할 수 있습니다.

그렇다면 100바이트의 텍스트 파일이 있다면? 그 파일은 100개의 문자로 이루어져 있습니다. 1000개의 문자로 이루어진 텍스트 파일은? 1000바이트가 됩니다. 대략 1KB가 됩니다. 정확히는 210 Byte = 1024 Byte = 1 KB (한글 문서나 워드 문서 크기가 몇 백 KB. 왜? 서식 정보 포함)

  • 퀴즈
    1. 24비트로 이루어진 이진숫자열이 있습니다. 이 데이터는 몇 바이트인가요? 텍스트 파일로 생각할 때 몇 개의 문자가 있을까요?
    2. 위에 표현된 40비트의 이진숫자열로 이루어진 텍스트 파일은 몇 바이트인가요? 그 텍스트 파일을 열면 어떤 문자열이 보일까요?

그럼 한글은 어떻게 표현할 수 있을까요? 또 음수는 어떻게 표현할 수 있을까요? 또 KB 이상의 데이터 용량의 단위는 무엇이 있을까요? 그런 데이터들은 실제로 하드 디스크나 메모리에 어떻게 저장이 될 수 있을까요? 이에 대해서는 다음 시간에 알아보도록 하고, 일단 2진법을 계속 사용하다보면 멀미가 날 수도 있기 때문에 16진법도 알아보려고 합니다.

16진법 (40:00-50:00)

이진법은 컴퓨터가 이해할 수 있는 표현 방식이지만, 인간에게는 너무나 알기 어려운 방식입니다. 하나하나 쓰다가 실수하기도 쉽습니다. 그래서 좀더 인간에게 친숙하면서 컴퓨터와도 친숙한 중간 단계의 표현방법이 있는데, 바로 16진법입니다. 16진법은 0부터 9 그리고 a,b,c,d,e,f 총 16가지의 문자를 사용합니다. 0부터 15까지는 한 자리로 표현되고, 16이 되면 자리를 올려야 하는 표현 방식입니다.

10진수 16진수 2진수
0 0 0000
1 1 0001
2 0010
... ... ...
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
16 10 10000
17 11 10001

16진법은 어디에 좋을까요? 2진수를 쉽게 변환하여 축약해서 보여줄 수 있습니다. 컴퓨터 파일을 우리가 들여다보고 싶을 때 0과 1이 끝없이 나열되어 있는 것을 보기보다는 16진수로 압축된 수의 나열을 보는 것이 훨씬 보기 좋을 것입니다.

다시 ‘APPLE’이란 문자열로 돌아가 봅시다. 이는 사실 아래와 같이 저장되어 있습니다.

(이진수) 01000001 01110000 01110000 01101100 01100101

이를 좀더 인간 친화적으로 만들려면 아래처럼 십진수로 바꾸는 방법이 있습니다.

(십진수) 65 112 112 108 101

그러나 이러한 변환은 무척 시간과 노력이 들어가는 일입니다. 인간에게도 그렇지만 컴퓨터에게도 그렇습니다. 그래서 컴퓨터는 파일의 실제 내용을 보여주고 싶을 때면 이진숫자열을 16진수로 바꾸어서 보여주곤 합니다.

0100 0001 0111 0000 0111 0000 0110 1100 0110 0101
4 1 7 0 7 0 6 C 6 5

즉 각 8비트 숫자열은 4비트씩 끊어서 아래와 같은 2자리의 16진수로 표현됩니다.

(16진수) 41 70 70 6C 65

16진수는 2진수 네 자리씩 끊어서 변환하면 기계적으로 간단하게 변환되며, 10진수와의 상호변환도 상대적으로 간단합니다. 예를 들어 195를 16진수로 바꾸어 봅시다.

195 ÷ 16 = 12 ⋯ 3
19510진수 = C316진수
C316진수 = 12×16 + 3 = 192 + 3 = 195
  • 테스트를 해볼까요?
    1. 10진수 232는 16진수로 얼마일까요?
    2. 16진수 EE는 10진수로 얼마일까요?
    3. 16진수의 나열 48 65 6C 6C 6F 로 표현되는 문자열은 무엇일까요?