정보의 단위
- 비트(bit) : 0과 1을 나타내는 가장 작은 정보 단위. n개의 bit는 2n개의 정보를 표현할 수 있다.
- 바이트(byte) : 8bit
- 킬로바이트(kB): 1000byte
- 메가바이트(MB): 1000kB
- 기가바이트(GB): 1000MB
- 테라바이트(TB): 1000GB
🤔 음... 그런데 1kB가 1024byte 아니었나요? 그 이상 단위들도 그렇구요.
✅ 엄밀히 따지면, 1024개씩 묶은 단위는 kiB, MiB, GiB 와 같은 방식으로 표현합니다.
과거에는 1000개씩 묶으나, 1024개씩 묶으나 큰 차이가 없었기 때문에 혼용해서 사용했었지만, 최근에는 기본적인 정보 단위의 크기가 커지면서 방식에 따라 큰 차이가 나서 구분하여 사용하는 추세입니다.
CPU에서의 정보 단위
- 워드(word) : CPU가 한번에 처리할 수 있는 정보의 크기 단위
- 하프 워드(half word) : 워드의 절반 크기
- 풀 워드(full word) : 워드 크기
- 더블 워드(double word) : 워드의 두 배 크기
🧑 만약 CPU가 한번에 32bit씩 처리할 수 있을 때, 1워드는?
✅ 1워드 = 32bit
이진법
컴퓨터가 수를 표현하는 방법. 0과 1만을 이용하여 나타낸다.
이진수의 표기
이진수의 표기는 두가지 방식으로 사용된다.
이진수 표기 | 일반적 표기 방식 | 코드상 표기 방식 |
1010(2) | 0b1010 |
이진수의 양수 표현
우리는 숫자가 9를 넘어갈 때 자리올림하는 "십진법"을 사용한다.
그렇다면, 이진법은? 마찬가지로 숫자가 1을 넘어갈 때 자리올림을 해주면 된다.
우리는 9에서 1이 오르면 10이 된다는 사실을 알고 있다.
한번 똑같이 적용해보자.
1 = 1(2)
우선, 1 = 1(2)이다. 여기서 1을 더해보자
1 + 1 = 1(2) + 1(2)
십진법으로는 2가 되는데, 이진법에서는 2가 없다. 따라서 자리 올림을 해준다.
2 = 10(2)
이와 같은 방법으로, 10까지의 수를 이진법으로 바꿔보면 다음과 같다.
- 3 = 11(2)
- 4 = 100(2)
- 5 = 101(2)
- 6 = 110(2)
- 7 = 111(2)
- 8 = 1000(2)
- 9 = 1001(2)
- 10 = 1010(2)
이진수의 음수 표현
아쉽게도, 음수를 컴퓨터에서 직접적으로 표현할 수는 없다.
그래서 현대 컴퓨터에서는 음수를 표현하기 위해 "2의 보수"라는 것을 활용한다.
2의 보수
일단 정의를 먼저 보자면, 2의 보수는 어떤 수를 그보다 큰 2n에서 뺀 값을 의미한다.
무슨 말인지 이해하기 쉽지않다...
하지만, 이보다 2의 보수를 더 쉽게 구하는 방법이 있다.
바로 수의 모든 0과 1을 뒤집고, 1을 더하는 것이다.
이 방법을 활용해, 7 = 0111(2)을 음수로 표현해보자!
1. 먼저, 모든 0과 1을 뒤집는다.
0111(2) → 1000(2)
2. 이후, 1을 더한다.
1000(2) → 1001(2)
이런 과정을 거치게되면 7의 음수, 1001(2)를 구할 수 있다.
🤔 어? 그러면 9의 이진법 표현과 같아지지 않나요? 어떻게 구분하는거죠?
✅ CPU 내부의 레지스터에 플래그 레지스터라고 부르는 특별한 레지스터가 있습니다. 이 레지스터에서 현재 값이 양수인지 음수인지를 표기해주기때문에, 컴퓨터가 헷갈릴 일은 없습니다.
십육진법
이진법으로 하다보니 숫자가 커질수록, 사람이 읽기에 너무 길어진다는 문제가 생겼다.
이런 문제를 개선하기 위해, 컴퓨터의 데이터를 표현할 때 십육진법 또한 많이 사용하게 되었다.
십육진법의 형태
십육진법은 1에서 9까지는 십진법과 동일하다.
10~15까지를 십육진법에서는 A~F로 표현하고, F를 넘어가면 자리 올림을 해준다.
십진수 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
십육진수 | 9 | A | B | C | D | E | F | 10 |
십육진수의 표기
십육진수의 표기 또한 이진법과 같이, 대표적으로 두가지 방식이 사용된다.
이진수 표기 | 수학적 표기 방식 | 코드상 표기 방식 |
15(16) | 0x15 |
🤔 십육진법을 근데 왜 써야하나요? 십진법 그냥 써도 되지 않나요?
✅ 여러가지 이유가 있지만, 가장 큰 이유는 이진수와 십육진수간의 변환이 쉽기 때문이지 않을까 합니다. 바로 아래에서 두 수 사이의 변환이 얼마나 쉬운지 보세요!
이진수와 십육진수 사이의 변환
이진수 → 십육진수
00011010(2)이라는 이진수를 십육진수로 변환해보겠습니다.
1. 우선, 이진수를 4개 단위로 잘라줍니다.
00011010(2) → 0001 1010
2. 자른 이진수를 각각 십육진수로 변환하여 합칩니다.
0001 1010 → 1 A → 1A(16)
굉장히 간단하게 십육진수로의 변환이 끝났습니다!
십육진수 → 이진수
앞에서 이진수를 변환하여 나온 결과인 1A를 다시 이진수로 변환해보겠습니다.
앞의 방법을 거꾸로 실행하는 것과 같습니다.
1. 우선, 십육진수를 하나씩 분리합니다.
1A(16) → 1 A
2. 이후, 분리된 십육진수를 각각 이진수로 변환하고 붙여줍니다.
1 A → 0001 1010 → 00011010(2)
이처럼, 간단하게 이진수와 십육진수 사이의 변환을 해보았습니다.
왜 이진수를 사용하는 컴퓨터가 십진수를 고집하지 않는지 잘 알 수 있죠!
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조 - 3] 컴퓨터가 문자를 표현하는 방식 (0) | 2024.04.03 |
---|---|
[컴퓨터 구조 - 1] 컴퓨터의 핵심 부품 4가지 + 메인보드 (0) | 2024.03.27 |