본 내용은 혼자 공부하는 컴퓨터 구조 + 운영체제 책을 공부하며 정리한 내용입니다.
https://www.yes24.com/Product/Goods/111378840
1. 0과 1로 숫자를 표현하는 방법
컴퓨터는 0과 1로 모든 정보를 표현한다.
어떻게 모든 수를 두 개의 숫자로 표현할 수 있을까?
여러분은 열 개의 손가락으로 1 부터 9까지의 숫자를 표현할 수 있다.
이를 이용해 각 자릿수의 숫자를 표현함으로써 1억, 1조, 1해의 숫자까지도 표현할 수 있다.
(기억력이 좋다면...)
우리가 보통 사용하는 수는 십진법 숫자이지만 컴퓨터는 이진법을 사용한다.
정보 단위
비트 → 0과 1을 나타내는 가장 작은 정보 단위
1바이트(1 byte) | 8비트(8 bit) |
1킬로바이트(1 kB) | 1,000바이트(1,000 byte) |
1메가바이트(1 MB) | 1,000킬로바이트(1,000 kB) |
1기가바이트(1 GB) | 1,000메가바이트(1,000 MB) |
1테라바이트(1 TB) | 1,000기가바이트(1,000 GB) |
1kB는 1,024byte, 1MB는 1,024kB 라고 표현하는 것은 잘못되었다.
이진
1메가바이트(1 MiB) | 1,024킬로바이트(1,000 kiB) |
1기가바이트(1 GiB) | 1,024메가바이트(1,000 MiB) |
1테라바이트(1 TiB) | 1,024기가바이트(1,000 GiB) |
워드→ CPU가 한 번에 처리할 수 있는 데이터 크기
현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트
ex) 인텔 x86 CPU: 32비트 워드 CPU, 인텔 x64 CPU: 64비트 워드 CPU
이진법
이진법은 1을 넘어가는 시점에 자리 올림을 하여 0과 1로 모든 수를 표현하는 방법
십진수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
이진수 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
이진수의 음수 표현
컴퓨터는 0과 1만 이해할 수 있기 때문에 마이너스 부호를 사용하지 않고 0과 1만으로 음수를 표현해야 함.
가장 널리 사용되는 방법은 2의 보수(two's complement) 이용하는 방법
2의 보수란 어떤 수를 커다란 2의 제곱수에서 빼서 얻은 값을 의미
1의 보수란 모든 이진수의 0과 1을 뒤집은 수
2의 보수 = 1의 보수 + 1
하지만 실제로 이진수만 봐서는 음수인지 양수인지 구분하기 어려움.
컴퓨터 내부에서 어떤 수를 다룰 때는 이 수가 양수인지 음수인지 구분하기 위해 플래그를 사용
※ 2의 보수 표현의 한계
0이나 2n 형태의 이진수에 2의 보수를 취하면 원하는 음수 값을 얻을 수 없음!
십육진법
이진법은 숫자의 길이가 너무 길어진다는 단점이 있어 이를 보완하기 위해 십육진법을 자주 사용
이진수와 마찬가지로 숫자 뒤에 아래첨자 (16)을 붙이거나 숫자 앞에 0x를 붙여 구분
ex) 수학적 표기: 15(16) , 코드상 표기 방식: 0x15
2. 0과 1로 문자를 표현하는 방법
컴퓨터가 이해하는 정보
이제 0과 1로 숫자들을 표현하는 방법을 알았는데, 문자는 어떻게 표현할까?
문자 집합과 인코딩
문자 집합: 컴퓨터가 인식하고 표현할 수 있는 문자의 모음
인코딩: 문자를 컴퓨터가 이해할 수 있는 0과 1로 변환
디코딩: 0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환
아스키 코드
하나의 아스키 문자를 나타내기 위해 8비트가 사용된다.
그 중 1비트는 패리티 비트로, 오류 검출을 위해 사용되는 비트이기 때문에 실질적으로 7개의 비트가 사용된다.
따라서 총 128개의 문자를 표현할 수 있다.
한국을 포함한 영어권 외의 나라들은 다양한 문자 표현을 위한 고유한 문자 집합과 인코딩 방식이 필요
한글 같은 경우에는 두 가지 방식의 인코딩이 존재함
● 완성형 인코딩
초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식
● 조합형 인코딩
초성, 중성, 종성, 각각을 위한 비트열을 할당하여 그것들의 조합으로 하나의 글자 코드를 완성하는 인코딩 방식
EUC-KR
대표적인 완성형 인코딩으로 초성, 중성, 종성이 모두 결합된 한글 글자에 2바이트(16 비트) 크기의 코드를 부여
총 2,350개 정도의 한글 단어를 표현할 수 있어, 모든 한글을 표현할 수 없다.
유니코드와 UTF-8
모든 언어를 아우르는 문자 집합과 통일된 표준 인코딩 방식이 있다면...
그래서 유니코드 문자 집합이 등장!
유니코드 글자에 부여된 값 앞에 U+라는 문자열을 붙이기도 하는데, 십육진수로 유니코드를 표현할 때 사용
유니코드 문자 집합에서는 각 문자마다 고유한 값이 부여된다.
하지만 아스키 코드나 EUC-KR과 달리 이 값은 인코딩 된 값이 아니라 자체를 인코딩을 한다.
UTF-8
가변적인 길이(1~4바이트)로 약속된 규칙으로 인코딩한다.
예시로 '곰'의 UTF8 방식으로 인코딩된 값을 구해보겠다.
'곰'에 부여된 값은 U+ACF0으로 확인할 수 있다.
0800과 FFFF 사이에 있는 값이므로 3바이트로 표현!
유니코드 문자 변환기 사이트: https://ko.rakko.tools/tools/89/
'Computer Architecture' 카테고리의 다른 글
[혼공컴운] Chapter3. 명령어 (0) | 2024.08.22 |
---|---|
[혼공컴운] Chapter1. 컴퓨터 구조 시작하기 (0) | 2024.08.04 |