
개요
컴퓨터에서 일어나는 모든 일은 두 개의 상태를 가질 수 있는 스위치들에 의해 제어된다. 스위치들의 조합은 각각 컴퓨터가 가지고 있는 상태를 표현하므로, 스위치들의 조합을 나열하면 컴퓨터에서 어떤 일이 일어났는지 설명할 수 있을 것이다. 대충 글로 표현한 예시는 "첫 번째와 두 번째 스위치는 켜져있고, 세 번째 스위치는 꺼져있고, 네 번째 스위치는 켜져있다"가 될 수 있다. 하지만 수십억 개의 스위치를 가지고 있는 현대의 컴퓨터를 이런식으로 설명하는 것은 불가능하므로 더 편리한 수 표기법을 사용해 표현하는 방법을 알아보자.
비트 표현
수를 표기하기 위해 0부터 9의 10개의 숫자를 사용하는 10진법(decimal system)은 익숙할 것이다. 하지만 스위치는 10개의 상태가 아니라 2개의 상태만을 가지고 있기 때문에 스위치를 수로 표기하는 것은 10진법보다는 0과 1의 두 개의 숫자를 사용하는 2진법(binary system)이 효과적이다.
스위치의 상태는 2진수(binary digit), 줄여서 비트(bit)를 사용해서 표현한다. 비트가 0이면 스위치가 꺼져있다는 것을 나타내고, 비트가 1이면 스위치가 켜져있다는 것을 나타낸다. 이 방법을 사용한다면 위에서 글로 표현한 컴퓨터의 상태를 1101이라는 수로 간단하게 표현할 수 있다.
비트들의 묶음 표현(16진법)
2진수로 표현하더라도 우리가 읽기에는 불가능할 정도로 많은 비트들이 있는 상황이 있을 수 있다. 이럴 때는 4개의 비트를 하나로 묶어 16개의 숫자를 사용하는 16진법(hexadecimal system)으로 나타낼 수 있다. 아래의 테이블은 4개의 비트들이 가질 수 있는 모든 상태와 대응하는 16진수를 나타낸 것이다.

16진수를 사용하면 1101 또는 "켜짐, 켜짐, 꺼짐, 켜짐"을 하나의 숫자 d로 나타낼 수 있다.(\(d_{16} = 1101_{2}\))
16진수의 사용
16진수는 16개나 32개의 비트의 상태를 표현할 때 특히 편리하게 쓰일 수 있다. 아래의 예와 같이 4개의 비트를 하나로 묶어 대응하는 16진수로 바꾸면 된다. 아래의 예들을 보자.


단일 비트는 데이터를 저장하는 데 그렇게 유용하지는 않다. 컴퓨터에서 한 번에 접근가능한 비트들의 개수 중 가장 작은 단위를 바이트(byte)라고 한다. 예외도 있지만, 대부분의 현대 컴퓨터들은 바이트가 8개의 비트로 구성되어있다.
C와 C++에서는 어떤 수의 접두사가 0x(숫자 0과 알파벳 x)라면 16진수를, 0 하나라면 8진수를 나타낸다. 2진수도 접두사 0b(숫자 0과 알파벳 b)로 표현이 가능하지만 C에서는 Standard로 정해져 있지 않기 때문에 어떤 C 컴파일러들에서는 되지 않을 수도 있다. 그런 예외 상황을 제외하면 아래의 변수들은 모두 같은 값을 나타낸다.
int a = 100;
int b = 0x64;
int c = 0144;
int d = 0b01100100;
비트들의 묶음 표현(8진법)
8진법(octal system)은 16진법만큼은 아니지만 그래도 자주 사용된다. 8진법은 3개의 비트를 하나로 묶어 0부터 7까지 8개의 숫자를 사용해 나타낼 수 있다. 아래의 테이블은 3개의 비트들이 가질 수 있는 모든 상태와 대응하는 8진수를 나타낸 것이다.

'Computer Organization' 카테고리의 다른 글
| <컴퓨터구조> 3. 메모리의 바이트 주소와 데이터 (0) | 2023.06.14 |
|---|---|
| <컴퓨터구조> 2. 2진법과 10진법의 관계 (0) | 2023.06.13 |