컴퓨터의 기본 단위
Table of Contents
비트(bit), 바이트(Byte)의 관계#
비트(bit)의 정의#
컴퓨터는 0,1 로 된 전기 신호만 이해합니다. 따라서 모든 정보를 숫자 0 또는 1로만 표현하며, 하나의 0 또는 1에 해당하는 디지털 표현 최소 단위가 비트입니다.
0과 1 두개의 숫자만 사용하여 이진수라 하며, 이진수에 해당하는 영어 ‘binary digit’ 를 줄여 bit 라고 부릅니다.
비트의 수가 많아질 수록 표현할 수 있는 정보는 2의 제곱승으로 늘어납니다. 2개의 비트가 있으면 4개 값 표현 가능, 3개의 비트가 있으면 8개의 값을 표현 가능합니다.
바이트(Byte)의 정의#
컴퓨터를 처음 개발한 영미권에서 알파벳 소문자 a~z, 대문자 A~Z, 숫자 0~9, 기타 기호를 표현하기 위해 비트 8개를 묶어 바이트로 정의했습니다. 따라서 256개의 값을 표현할 수 있습니다.
메모리와 저장장치의 용량을 계산할 때 바이트(Byte)가 기본 단위가 됩니다. CPU가 정보를 처리하는 최소 단위도 1Byte 입니다.
컴퓨터의 데이터 단위#
컴퓨터의 데이터 단위는 아래와 같습니다.
단위 | 영문 | Byte 단위 | 전단위와 비교 | 예시 저장공간 크기 |
---|---|---|---|---|
비트 | bit | 0/1 | 예/아니오 | |
바이트 | Byte | 8bit | 1Byte | 알파벳 숫자 1개 |
킬로 바이트 | KB | \(2^{10}\)Byte | 1024Byte | 몇개의 문단 |
메가 바이트 | MB | \(2^{20}\)Byte | 1024KB | 1분 길이의 MP3 노래 |
기가 바이트 | GB | \(2^{30}\)Byte | 1024MB | 30분 길이의 HD 영화 |
테라 바이트 | TB | \(2^{40}\)Byte | 1024GB | 약 200편의 FHD 영화 |
B -> KB -> MB -> GB -> TB 로 갈 때 각각 \(2^{10}\) 만큼 곱해집니다.
영문 ‘A’ 한 글자는 1Byte 를 사용합니다. 한글 한문자는 2Byte가 필요합니다.
16진수#
컴퓨터 아키텍쳐를 보면 16진법으로 표현한 헥사값(Hexadecimal) 을 보게 됩니다. 16진법을 사용하는 이유는, 16진수 하나가 \(2^4\) 를 표현할 수 있기 때문입니다. 2진법으로 표현했을 때 “0101 1111” 로 표현할 것을 16진법을 사용해 간단히 “0x5F” 로 표현할 수 도 있습니다. 8개의 bit 가 모인 Byte 단위의 정보를 표현하는데, 두자리의 16진수로 표현할 수 있습니다.
10진법, 16진법, 2진법#
10진법 | 16진법 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | A |
11 | B |
12 | C |
13 | D |
14 | E |
15 | F |
앞에 “0x” 를 붙이거나 아래 첨자로 16 또는 hex 를 표기하여 16진법임을 표시할 수 있습니다.
32bit, 64bit 운영체제#
운영체제나 CPU의 데이터 기본 처리 단위인 word 에 따라 한번에 처리할 수 있는 데이터의 크기가 달라집니다. 32bit, 64bit 는 워드 사이즈를 나타내며, 32bit 머신은 기본 데이터 처리 단위가 32bit (=4Byte) 가 됩니다. 이때 최대 메모리 주소 번지는 0xFFFFFFFF
가 되며, \(2^{32}\) 로 4GB 입니다.
메모리 주소#
정수형 변수 n에 50이라는 값을 저장하고 출력한다고 생각해 봅시다.
이 n 이라는 값은 int 타입이므로, 아래 그림과 같이 우리 컴퓨터의 메모리 어딘가에 4바이트 만큼의 자리를 차지하며 저장되어 있을 것입니다.
C 에서 변수의 메모리 상 주소를 받기 위해 &
연산자를 사용할 수 있습니다.
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%p\n", &n);
}
예를 들어, 위와 같은 코드를 실행하면 ‘0x7ffe00b3adbc’와 같은 값을 얻을 수 있고, 이는 변수 n의 16진법으로 표현된 메모리의 주소입니다.
반대로 *
를 사용하면 그 메모리 주소에 있는 실제 값을 얻을 수 있습니다.
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%i\n", *&n);
}
이때 n 의 주소를 &
를 사용해서 얻고, 다시 *
로 실제 값을 구한 것이기 때문에 값은 50이 출력됩니다.