이 글에서는 컴퓨터가 이해하는 정보의 단위와 숫자를 표현하는 방법(이진법, 십육진법)에 대해 정리하고자 한다.
정보 단위
컴퓨터는 0과 1만 이해할 수 있다. 컴퓨터가 이해하는 가장 작은 단위는 0과 1을 나타낼 수 있는 비트(bit)라고 한다. 비트는 흔히 전구에 비유하는데, 1bit는 두 가지 정보 표현(0 혹은 1)이 가능하다. (전구가 꺼진 것은 0, 켜진 것은 1이라고 생각하면 된다. / 전구 1개 = 1bit)
따라서, 2bit는 4가지의 정보 표현, 3bit는 8가지의 정보 표현이 가능하다. 이러한 규칙으로 미루어 봤을 때, n bit는 \( 2^n \) 가지의 정보 표현이 가능하다.
모든 단위를 bit로 표현할 수는 없기 때문에, bit보다 큰 단위들이 존재한다. bit보다 큰 단위는 바이트(byte), 킬로바이트(kB; kilobyte), 메가바이트(MB, megabyte), 기가바이트(GB, gigabyte), 테라바이트(TB, terabyte) 등이 존재한다. (테라바이트보다 큰 단위도 존재하지만, 일반적으로 사용하는 최대 단위는 테라바이트이다.)
1byte는 8bit를 의미하며, \( 2^8 \)개(256개)의 정보를 표현할 수 있다. 1KB는 1000byte를 의미하고, 1MB는 1000KB를 의미한다. 1GB는 1000MB를, 1TB는 1000GB를 의미한다. bit에서 byte로 넘어가는 단위를 제외하고, 단위가 하나 커질수록 1000배 커진다고 생각하면 된다.
✔️ Note
1kB를 1024byte, 1MB를 1024kB와 같이 표현하는 방식은 잘못된 관습이다. 1024개의 묶어 표현하는 단위는 kB, MB, GB가 아니라 kiB, MiB, GiB이다.
이진법
이진법(Binary)은 숫자를 0과 1만 사용해서 표현하는 방법이다. 우리가 일상 생활에서 사용하는 십진법은 9가 넘어가는 순간에 자리 올림(0~9까지 사용)을 한다면, 이진법은 1을 넘어가는 순간에 자리 올림(0과 1 사용)을 하여 모든 숫자를 표현할 수 있다.
* 이진수 : 이진법으로 표현한 수
** 십진수 : 십진법으로 표현한 수
이진수를 그냥 사용하면 십진수와 혼동할 수 있기 때문에 이진수를 나타낼 때에는 아래첨자 (2)를 사용(ex. \( 100_{(2)} \)) 하거나 0b를 숫자 앞에 사용(ex. 0b100)해서 십진법과 구분한다.
이진수의 음수 표현
이진수는 0과 1만을 사용하고, 컴퓨터는 0과 1만을 이해하기 때문에 이진수의 음수 역시 0과 1만을 이용하여 표현해야 한다. 음수를 표현하기 위해 가장 많이 사용하는 방법이 바로 2의 보수(Two's Complement)를 구해 이 값을 음수로 간주하는 방법이다.
2의 보수의 사전적 의미는 "어떤 수를 그보다 큰 \( 2^n \)에서 뺀 값"을 의미한다. 사전적 정의를 이용하여 \( 11_{(2)} \)의 보수를 구하면 \( 11_{(2)} \)보다 큰 \( 2^n \)인 \( 100_{(2)} \)에서 \( 11_{(2)} \)를 뺀 \( 01_{(2)} \)가 된다.
일반적으로 2의 보수를 구할 때에는 모든 0과 1을 뒤집고(0은 1로, 1은 0으로) 1을 더하면 된다. 2의 보수를 구하고 다시 2의 보수를 구하면, 즉 2의 보수를 두 번 구하면 다시 자기 자신으로 돌아오게 된다. 2의 보수를 음수라고 컴퓨터가 간주하긴 하지만, 숫자만 놓고 보면 음수인지 양수인지 구분하는 것은 불가능하다. 그래서 컴퓨터는 플래그(flag)*라는 것을 사용해서 음수와 양수를 인지하게 된다.
* 플래그(flag) : 컴퓨터 내부에서 어떤 값을 다룰 때 부가 정보가 필요하다면 사용하는 것
십육진법
이진법이 0과 1만 사용해서 숫자를 표현했다면, 십육진법은 0부터 15(F)까지 16개의 숫자를 사용해서 수를 표현하는 방법이다. 0부터 9까지는 십진법과 동일하게 숫자를 사용하며 10부터 15까지는 A부터 F로 각각 표현한다. 십육진법에서는 15가 넘어가는 순간 자리 올림을 하게 된다.
십육진수를 구분하기 위해 아래첨자로 (16)을 사용(ex. \( 1F23EA_{(16)} \) )하거나 숫자 앞에 0x를 붙여 사용(ex. 0x1F23EA)한다. 십육진수는 이진수보다 짧게 숫자를 표현할 수 있다는 장점이 있다.
십육진수에서 이진수로 변환
컴퓨터는 이진수를 이해하고, 우리는 십진수를 사용하는데 굳이 십육진수를 사용하는 이유는 십육진수를 이진수로 변환하기 쉽기 때문이다.
십육진수를 이진수로 변환할 때에는 십육진수 자리 하나당 이진수 4자리로 표현하면 된다. 그렇게 표현한 이진수들을 모두 이어 붙이면 십육진수에서 이진수로 바뀌게 된다.
이진수에서 십육진수로 변환
이진수를 십육진수로 변환하는 방법은 아까와 반대로 하면 된다. 이진수를 먼저 4자리씩 끊은 후에, 4자리씩 십육진수로 변환한다. 그 후 이어 붙이면 이진수에서 십육진수로 변하게 된다.
이진수를 4자리씩 끊을 때에는 오른쪽에서 4자리 씩 끊어야 하며, 만약 자릿수가 부족하다면 부족한 자릿수를 0으로 채우면 된다.
요약
- 정보의 최소 단위는 비트(bit)이며 0과 1로 표현된다.
- 비트보다 큰 단위로는 순서대로 바이트(byte), 킬로바이트(kB), 메가바이트(MB), 기가바이트(GB), 테라바이트(TB) 등이 있다.
- 이진법에서 음수는 2의 보수로 표현하며, 컴퓨터는 이를 플래그라는 것을 이용하여 음수와 양수를 구분한다.
Reference
1. 혼자 공부하는 컴퓨터구조 + 운영체제 / 출판사: 한빛미디어 / 저자: 강민철
'Computer Science > 컴퓨터구조' 카테고리의 다른 글
CS | 컴퓨터구조 | 고급 언어와 저급 언어 (0) | 2024.04.17 |
---|---|
CS | 컴퓨터구조 | 문자의 인코딩 및 디코딩 방식 (0) | 2024.04.01 |
CS | 컴퓨터 구조 | 컴퓨터가 이해하는 정보와 컴퓨터의 핵심 부품 (0) | 2024.03.22 |