본문 바로가기
CS

[CS] 0과 1로 숫자를 표현하는 방법

by seonggu 2023. 1. 10.

1️⃣ 정보 단위

컴퓨터가 이해하는 가장 작은 정보 단위는 비트(bit)라고 한다. 비트는 전구에 빗대어 생각을 해보면 쉽다. 전구 한 개가 꺼지거나 켜지는 상태 두 가지의 상태를 표현할 수 있듯이 1비트는 0 또는 1, 두 가지 정보를 표현할 수 있다.

 

그럼 2비트는 몇 개의 정보를 표현할 수 있을까? 두 개의 전구는 다음과 같이 표현할 수 있다.

(켜짐 켜짐) (켜짐 꺼짐) (꺼짐 켜짐) (꺼짐 꺼짐)

두 개의 전구가 네 가지의 상태를 표현할 수 있었으니 2비트는 4가지의 정보를 표현할 수 있다. 그러면 3비트는 당연하게 8가지의 정보를 표현할 수 있다. 하여 n비트는 2ⁿ가지의 정보를 표현할 수 있다.

 

✅ 그럼 바이트는 무엇일까? 바이트(byte)는 여덟 개의 비트를 묶은 단위로, 비트보다 한 단계 큰 단위이다. 하나의 바이트가 표현할 수 있는 정보는 몇 개일까? 1바이트는 8비트와 같으니까 2의 8제곱(256)개의 정보를 표현할 수 있다. 바이트 또한 더 큰 단위로 묶을 수 있는데,
1바이트 1,000개를 묶은 단위를 1킬로바이트 (KB; kilobyte)
1킬로바이트 1,000개를 묶은 단위를 1메가바이트 (MB; Megabyte)

1메가바이트 1,000개를 묶은 단위를 1기가바이트 (GB; Gigabyte)

1기가바이트 1,000개를 묶은 단위를 1테라바이트 (TB; Terabyte)

테라바이트보다 더 큰 단위들도 존재하나 보통 다루는 데이터들은 테라바이트까지인 경우가 많다.

 

✅ 1kB는 1,024byte, 1MB는 1,024kB라고 표현하는 것은 잘못된 관습이라고 한다. 이전 단위를 1,024개를 묶어서 표현한 단위는 kB, MB, GB, TB가 아닌 KiB, MiB, GiB, TIB이다.

 

✅ 그럼 워드란?

CPU가 한번에 처리할 수 있는 데이터 크기를 의미한다. CPU가 한 번에 16비트를 처리할 수 있다고 하면 1워드는 16비트가 되고, 한 번에 32비트를 처리할 수 있다고 하면 1워드는 32비트가 되는 것이다.

정의된 워드의 절반 크기를 하프 워드(half word), 1배 크기를 풀 워드(full word), 2배 크기를 더블 워드(double word)라고 부른다. 워드 크기가 큰 CPU는 한 번에 처리를 할 수 있는 데이터가 많아지는 것이다. 

현재 사용되는 컴퓨터들의 워드크기는 대부분 32, 64비트이다. 인텔 x86 CPU는 32비트 워드 CPU, x64 CPU는 64비트 워드 CPU이다.

 

2️⃣ 이진법

수학에서 0과 1만으로 모든 숫자를 표현하는 방법을 이진법(binary)라고 한다. 이진법을 이용하면 1보다 큰 수도 0과 1만으로 표현할 수 있다.

보통 숫자를 셀 때 9가 넘어가게 되면 올림이 발생한다. 9에서 10, 19에서 20으로 넘어가는 것처럼 일상에서는 십진법(decimal)을 사용하기 때문이다. 

이와 유사하게 이진법은 숫자가 1을 넘억나느 시점에서 자리를 올림 하여 0과 1, 두 개의 숫자만으로 모든 숫자를 표현한다.

이진법으로 표현한 수를 이진수, 십진법으로 표현한 수를 십진수라고 한다. 

 

16진수, 십육진수 : 한 글자당 열여섯 종류(0~9, A~F)의 숫자를 표현할 수 있다. 십육진수를 이루는 숫자 하나를 이진수로 표현하려면 4비트가 필요하다. 2⁴ = 16

 

그럼 십진법이 있는데 굳이 십육진법을 많이 사용하는 이유는 이진수를 십육진수, 십육진수를 이진수로 변환하기 쉽기 때문이다. 이진수 숫자를 네 개씩 끊고, 끊어 준 네개의 숫자를 하나의 십육진수로 변환한 뒤 그대로 이어 붙이면 되기 때문에 쉽다.

 

 

 

참고자료 -

더보기

혼자 공부하는 컴퓨터구조 + 운영체제 / 한빛미디어

 

image -

https://www.flaticon.com/free-icon/bit_6410025?term=bit&page=1&position=8&origin=search&related_id=6410025 

 

'CS' 카테고리의 다른 글

[CS] ALU와 제어장치  (0) 2023.01.31
[CS] 다양한 주소 지정 방식  (0) 2023.01.19
[CS] 명령어의 구조  (0) 2023.01.17
[CS] 소스코드와 명령어  (0) 2023.01.14
[CS] 0과 1로 문자를 표현하는 방법  (0) 2023.01.12