1. 정보 단위 - 비트와 바이트
컴퓨터는 오직 두 가지 상태, 즉 전기가 흐르거나 흐르지 않는 상태만을 인식할 수 있다. 이 두 상태를 0과 1로 표현하며, 이를 가장 작은 정보 단위인 ⟨⟨비트(bit)⟩⟩라고 부른다. 하나의 비트는 단순히 두 가지 값만 표현할 수 있으므로, 실질적인 정보 하나를 담기에는 부족하다.
그래서 컴퓨터는 여러 개의 비트를 묶어서 사용한다. 가장 기본적인 묶음 단위는 ⟨⟨바이트(byte)⟩⟩로, 1바이트는 8비트로 구성된다. 8비트로 만들 수 있는 조합은 총 256가지(2⁸)이며, 이 정도면 알파벳 대소문자, 숫자, 특수문자 등 기본적인 문자 정보 하나를 표현할 수 있다.
⟨⟨바이트⟩⟩를 기준으로 저장 단위는 계속 확장된다.
- 1KB (킬로바이트) = 1024바이트
- 1MB (메가바이트) = 1024KB
- 1GB (기가바이트) = 1024MB
이처럼 모든 디지털 정보는 결국 비트와 바이트로 이루어져 있다. 우리가 보는 이미지, 음악, 문서 파일도 본질적으로는 0과 1의 조합이며, 그 출발점은 단 하나의 비트다.
2. 이진법이란?
우리는 일상에서 0부터 9까지의 숫자를 사용하는 ⟨⟨10진법⟩⟩에 익숙하다. 숫자 하나하나가 10개의 기호(0~9) 중 하나로 구성되어 있기 때문이다. 하지만 컴퓨터는 상황이 다르다. 컴퓨터 내부의 회로는 전기가 흐르거나 흐르지 않는 두 가지 상태만 구분할 수 있으므로, 자연스럽게 두 개의 숫자만을 사용하는 ⟨⟨2진법⟩⟩을 채택하게 되었다.
이진법에서는 0과 1이라는 두 숫자만 사용되며, 자리수마다 2의 거듭제곱을 기준으로 값을 계산한다. 예를 들어 10진수의 5는 2진수로 ⟨⟨101⟩⟩인데, 이는 (1×2²) + (0×2¹) + (1×2⁰)이라는 의미다.
왜 이진법을 사용할까?
- 전기 신호는 ‘있다(1)’와 ‘없다(0)’로 명확하게 구분할 수 있음
- 하드웨어 회로 설계가 단순해짐
- 외부 간섭에도 강한 내구성 유지 가능
즉, 컴퓨터는 본질적으로 아날로그가 아닌 디지털 장치이며, 모든 정보는 2진수 형태로 저장되고 연산된다.
이진수로 음수는 어떻게 표현할까?
양수는 단순히 이진수로 그대로 표현하면 되지만, 음수는 특별한 방식이 필요하다. 가장 대표적인 방식이 ⟨⟨2의 보수⟩⟩다. 예를 들어 5를 음수로 표현하려면 다음과 같은 절차를 따른다.
- 5의 이진 표현: 00000101
- 비트 반전: 11111010
- 1 더하기: 11111011 → -5의 2의 보수 표현
이 방식의 장점은 컴퓨터가 뺄셈을 덧셈으로 바꾸어 처리할 수 있다는 점이다. 덧셈 회로만으로도 음수 계산이 가능하므로 하드웨어를 단순화할 수 있다.
3. 16진법
컴퓨터가 내부적으로 모든 데이터를 2진수로 처리한다면, 왜 굳이 ⟨⟨16진법⟩⟩이라는 진법이 존재할까? 이유는 간단하다. 2진수는 자릿수가 너무 길기 때문이다. 예를 들어, 10진수 255는 2진수로 ⟨⟨11111111⟩⟩인데, 단 1바이트의 값을 표현하는 데도 8자리가 필요하다. 이럴 때 4비트씩 끊어서 표현하면 16진수가 된다. 4비트는 0~15까지의 값을 가질 수 있고, 이를 16진수로 바꾸면 0~9는 그대로 사용하고, 10~15는 A~F로 표현된다.
2진수 | 16진수 |
0000 | 0 |
1001 | 9 |
1010 | A |
1111 | F |
예를 들어, ⟨⟨11111111⟩⟩(2진수)은 ⟨⟨FF⟩⟩(16진수)로 표현할 수 있다. 이렇게 줄이면 사람이 읽기 훨씬 쉬워지고, 디버깅이나 메모리 주소 확인 같은 작업에서 큰 도움이 된다.
왜 하필 16진법인가?
- 2진수와의 궁합이 좋다: 4비트 = 1자리, 8비트 = 2자리
- 표기 효율성이 뛰어나다: 긴 2진수를 짧게 요약할 수 있음
- 언어와 도구에서 표준처럼 사용됨: C 언어나 어셈블리, 디버거에서 0x로 시작하는 형식으로 자주 등장
그렇다면 32진법이나 64진법은 왜 사용되지 않을까? 그 이유는 숫자 기호를 10개(0~9), 알파벳을 26개(A~Z) 정도밖에 사용할 수 없기 때문이다. 16진법은 그 한계를 넘지 않으면서도 가독성과 호환성을 모두 확보할 수 있는 적절한 진법이다.
4. 인코딩과 디코딩
컴퓨터는 문자 자체를 이해하지 못한다. 우리가 보는 글자나 기호들은 컴퓨터에게는 그저 숫자일 뿐이다. 그래서 문자를 숫자로 바꾸는 작업이 필요한데, 이것이 바로 ⟨⟨인코딩(Encoding)⟩⟩이다. 반대로, 숫자를 다시 문자로 되돌리는 과정을 ⟨⟨디코딩(Decoding)⟩⟩이라고 한다.
ASCII: 초기 문자 인코딩 방식
초기의 인코딩 방식으로 가장 널리 사용된 것이 ⟨⟨ASCII 코드⟩⟩다. 이 방식은 7비트를 사용해 128개의 문자를 표현한다. 영어 알파벳, 숫자, 특수기호, 제어 문자 등이 포함되며, 예를 들어 대문자 A는 65, 소문자 a는 97이라는 숫자로 저장된다.
하지만 ASCII는 영어를 기준으로 만들어졌기 때문에, 한글이나 일본어, 중국어 같은 비영어권 문자는 표현할 수 없다. 이러한 한계는 전 세계적으로 문자를 다루는 데 큰 제약이 되었다.
유니코드와 UTF-8
이 문제를 해결하기 위해 등장한 것이 ⟨⟨유니코드(Unicode)⟩⟩다. 유니코드는 전 세계의 거의 모든 문자를 하나의 체계 안에 정의하고 있으며, 각 문자에 고유한 숫자 값을 부여한다. 하지만 유니코드는 고정 길이 방식(예: 2바이트, 4바이트)이기 때문에 비효율적인 경우가 많았다.
그래서 이를 보완한 방식이 ⟨⟨UTF-8⟩⟩이다. UTF-8은 가변 길이 인코딩 방식으로,
- 영어처럼 간단한 문자는 1바이트,
- 한글처럼 복잡한 문자는 3바이트,
- 이모지 같은 특수 문자는 4바이트까지 사용한다.
이 방식 덕분에 영어 텍스트는 용량을 적게 차지하고, 다양한 언어도 동시에 표현할 수 있어 현재 가장 널리 사용되는 문자 인코딩 방식이 되었다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
RAM (0) | 2025.06.18 |
---|---|
CPU (2) (1) | 2025.06.18 |
CPU (1) (0) | 2025.06.18 |
컴퓨터에게 명령하기 (0) | 2025.06.17 |
컴퓨터의 구성 요소 (1) | 2025.06.17 |