⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다. 옳바르지 못한 내용을 발견하셨다면 댓글로 알려주시길 부탁드립니다. 수정하도록 하겠습니다.
오늘의 사족
오늘의 사족은 없습니다! 왜냐면 할 말이 없기 때문이죠!
< 목차 >
1. 컴퓨터가 이해하는 정보 단위(Bit, Byte, KB, MB, GB, TB)
2. 이진법(Binary), 십진법(Decimal), 십육진법(Hexadecimal)으로 숫자 표현하기
1. 컴퓨터가 이해하는 정보 단위(Bit, Byte, KB, MB, GB, TB)
컴퓨터는 0과 1로 이루어진 수만 이해한다고 하였다. 이 말은 즉슨 컴퓨터가 이해할 수 있는 가장 작은 정보의 단위는 0과 1 이렇게 두 개의 정보이다. 이를 bit라 하기를 약속했다.
0 1 |
00 01 10 11 |
000 011 001 010 111 101 110 100 |
1bit = 2¹ | 2bit = 2² | 3bit = 2³ |
위 표에서 1bit가 표현할 수 있는 정보는 0, 1 이렇게 두 개이다. 2bit로 표현할 수 있는 정보는 00, 01, 10, 11로 네 개이다. 이처럼 nbit가 표현할 수 있는 정보는 2ⁿ개이다.
이처럼 가장 작은 정보를 표현하는 단위를 bit라 한다.
우리가 일상생활에서 길이를 표현하는 단위에 대해 생각해보면 mm < cm < km 와 같이 길이가 길어질 수록 그에 맞는 길이 단위를 사용하는 것이 익숙하다. 컴퓨터가 사용하는 정보 단위를 표현하는 것도 마찬가지이다. bit의 단위가 커지면 커질수록 그에 맞는 크기 단위가 있다.
1 byte | 8 bit |
1kB | 1,000 byte |
1MB | 1,000kB |
1GB | 1,000MB |
1TB | 1,000GB |
2. 이진법(Binary), 십진법(Decimal), 십육진법(Hexadecimal)으로 숫자 표현하기
이진법은 말 그대로 두 개의 숫자(0,1)만으로 수를 표현하는 방법이다. 십진법은 열 개의 숫자(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)로, 십육진법은 16개의 숫자(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F)와 문자로 수를 표현하는 방법이다.
우리가 흔히 일상생활에서 숫자를 표현하는 방법은 십진법이다. 그런데 컴퓨터는 0과 1 두 개의 수만 이해한다고 했으니 우리는 컴퓨터의 언어를 이해하려면 십진법으로 표현된 수를 이진법으로 어떻게 표현하는지 알아야 할 필요가 있다.
십진수 → 이진수
십진수 | 이진수 |
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
9 | 1001 |
10 | 1010 |
11 | 1011 |
12 | 1100 |
13 | 1101 |
14 | 1110 |
15 | 1111 |
16 | 10000 |
이렇게 십진수를 이진수로 바꿔보았다. 여기서 주의할 점이 있다. 프로그래밍을 할 때 간혹 이진수를 사용하는 경우가 있다. 이때 이진수 100을 코드에 작성하고 나중에 코드를 다시 보면 이게 100(백)을 말하는 건지 100(일영영)을 말하는 건지 헷갈리는 경우가 생길 수 있다.
그래서 이진수로 표현된 수는 앞에 0b를 붙인다. 즉 100으로 표현된 이진수를 이진수라고 확실히 알도록 0b100으로 표현한다.
십육진수도 마찬가지이다. 뒤에서 설명할 것이지만 십진수 16을 십육진수에서는 10으로 표현한다. 그래서 십육진수는 수 앞에 0x를 붙인다. 0x10라는 수를 보면 이 수는 십육진법으로 표현된 수이므로 십진수로는 16을 의미한다는 것을 바로 알 수 있다.
이렇게 수를 이진법으로 표현하는 법을 알아보았다. 그런데 한 가지 간과한 점이 있다.
눈치챈 사람이 있는가?
그렇다 바로 음수를 표현하지 않았다는 것이다. 십진수로 음수를 표현할 때 우리는 수 앞에 음수 부호(-)를 붙인다. 그러나 컴퓨터는 0과 1 이 두가지의 수만 이해한다. 따라서 이진수로 음수를 표현하는 데 있어서 부호를 사용할 수 없다.
그렇다면 어떻게 이진수를 음수로 표현하는가?
0과 1 두 가지의 수로만 음수를 표현하는 방법으로는 2의 보수를 구하는 방법이 있다.
보수는 부호를 사용할 수 없는 컴퓨터가 음수를 표현하기 위해 사용하는 수이다.
백문이 불어일견이라고 예시를 통해 2의 보수를 이해해보자
0b11의 보수를 구해보자
0b11은 십진수로 3을 의미한다. 3보다 큰 2ⁿ 중에서 가장 작은 수인 4에서 3을 뺀다. 0b100 - 0b11 = 0b01이 된다.
어떤 이진수의 2의 보수를 구한다고 하면 어떠한 이진수의 모든 0과 1을 뒤집은 다음에 1을 더해주면 된다.
0b11의 보수를 구한다는 것은 0b11을 음수로 표현한다는 뜻이다. 0b11은 십진수로 3이다.
이제 0b11보다 큰 2ⁿ 중에 가장 작은 수인 2²인 0b100에서 0b11을 뺐더니 0b01를 구했다. 그러면 이제 컴퓨터한테 해당 수는 음수라는 것을 알려주어야 한다. 이때 사용하는 것이 바로 Flag(플래그)이다. 해당 수가 음수인지 양수인지 플래그를 사용하면 CPU가 해당 데이터를 처리할 수 있다.
지금까지 십진수를 이진수로 바꾸는 방법과 이진수를 음수로 표현하는 방법을 알아보았다.
이제 십육진수에 대해 알아볼 것이다. 앞에 십진수를 이진수로 표현한 표를 보면 2의 승이 1씩 증가할 때마다 자릿수도 증가하는 것을 확인할 수 있다. 예를 들어 2⁸을 이진수로 표현하면 0b100000000이다. 이건 너무 많은 자릿수를 차지한다는 생각이 들지 않는가?
그래서 데이터를 표현하는 방법 중에 십육진법을 자주 사용한다. 그러면 십진수를 십육진수로 어떻게 표현하는지 알아보자
십진수 → 십육진수
십진수 | 십육진수 |
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 |
16 | 10 |
프로그래밍할 때 십육진수도 자주 사용한다.
왜 십진수처럼 우리가 일상생활에서 자주 사용하는 수도 아니고 0과 1만 사용하는 컴퓨터가 이해하는 이진수도 아닌 십육진수를 사용할까?
데이터를 표현할 때 십육진수를 자주 사용하는 이유는 이진수로 표현하는 경우에 자릿수를 많이 차지하기 때문이라 하였다. 즉, 십육진수를 이진수로 대신해서 사용한다. 십육진수를 이진수로 이진수를 십육진수로 바꾸기 쉽기 때문이다.
0x | 8 | B | 9 | C | 0b | 1000 | 1011 | 1001 | 1100 |
⬇ | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ | ⬇ |
0b | 1000 | 1011 | 1001 | 1100 | 0x | 8 | B | 9 | C |
'🖥️ Computer Science > Computer Architecture' 카테고리의 다른 글
[Computer Architecture] CPU의 구성요소_ALU, CU, Registers (1) | 2023.12.13 |
---|---|
[Computer Architecture] Instruction Architecture(명령어의 구조)에 대하여 (2) | 2023.12.12 |
[Computer Architecture] 고급 언어와 저급 언어에 대하여_기계어, 어셈블리어, Compile, Interpreter (2) | 2023.12.11 |
[Computer Architecture] 0과 1로 문자 표현하기_ASCII(아스키), EUC-KR, Unicode (2) | 2023.12.10 |
[Computer Architecture] Computer Architecture(컴퓨터 구조)에 대하여 (9) | 2023.12.06 |