Skip to main content

컴퓨터의 기본 단위

·3 mins· loading · loading ·
CS 단위
Soeun Uhm
Author
Soeun Uhm
problem-solving engineer, talented in grit.
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 단위전단위와 비교예시 저장공간 크기
비트bit0/1예/아니오
바이트Byte8bit1Byte알파벳 숫자 1개
킬로 바이트KB\(2^{10}\)Byte1024Byte몇개의 문단
메가 바이트MB\(2^{20}\)Byte1024KB1분 길이의 MP3 노래
기가 바이트GB\(2^{30}\)Byte1024MB30분 길이의 HD 영화
테라 바이트TB\(2^{40}\)Byte1024GB약 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진법
00
11
22
33
44
55
66
77
88
99
10A
11B
12C
13D
14E
15F
image

앞에 “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이 출력됩니다.

Reference
#