정보단위
컴퓨터는 0또는 1밖에 이해를 못한다. 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 한다.
바이트를 제외한 다른 단위들은 이전 단위를 1000개 묶어 표현한다.
1바이트(byte) = 8bits
1킬로바이트(kB) = 1000바이트
1메가바이트(MB) = 1000킬로바이트
1기가바이트(GB) = 1000메가바이트
1024개를 묶어 표현한 단위는 KiB, MiB, GiB이다.
워드(word)
워드란 CPU가 한번에 처리할 수 있는 데이터 크기를 의미한다.
인텔의 x86 CPU는 32비트 워드 CPU(1워드가 32비트)이고 x64 CPU는 64비트 워드 CPU(1워드가 64비트)이다.
이진법
0과 1만으로 모든 숫자를 표현하는 방법을 이진법이라 한다.
이진법으로 표기한 수를 이진수, 십진법으로 표기한 수를 십진수라 한다.
숫자로만 표기하면 헷갈릴 수 있기 때문에 이진수 끝에 아래첨자를 붙이거나 맨 앞에 0b를 붙인다.
1000(2) or 0b1000
이진수에서 음수 표현
이진수에서 음수 표현방법은 2의 보수를 구해 이 값을 음수로 간주하는 방법이 있다.
현재 그 수에서 2의N제곱 큰 수에서 현재 수를 뺀 값을 적으면 된다.
다른 방법으로는 모든 자리수의 0과 1을 뒤집고 그 값에 1을 더한 값으로 사용해도 같다.
0b11의 보수 찾는 방법
100 - 11 => 01
00 + 1 => 01
이렇게만 표현한다면 음수인지 양수인지 구별하기 어렵다.
그렇기에 구분을 위해 플래그를 사용한다.
문제점 : 0이나 2의n제곱 형태의 이진수의 보수를 취하면 원하는 음수값을 얻을 수 없다.
(0000 => 10000), (1000 => 0111 + 1 => 1000)
16진법
이진법만으로 숫자를 표현하면 길이가 너무 길어진다는 단점이 있다.
그래서 데이터를 표현할 때 이진법 이외에 십육진법도 자주 사용한다.
16진법은 9를 넘어가는 자리를 A,B,C,D,E,F로 표현한다.
십육진수는 앞에 0x를 붙이거나 끝에 아래첨자를 붙여 구분한다.
15(16) or 0x15
16진수 사용 이유
16진수를 사용하는 주된 이유는 2진수와의 변환이 쉽기 때문이다.
16진수에서 한자리마다 이진수로 표현하려면 4비트가 필요하다.
1A2B에서 1은 0001, A는 1010, 2는 0010, B는 1011로 각 자리를 이진수로 표현할 수 있다.
이를 다 이어 붙이면 이진수로 변환이 끝난다.
0x1A2B => 0b0001101000101011
반대로 2진수를 16진수로 변환할 때는 4자리씩 끊어 그 숫자를 16진수로 변환한 뒤 이어 붙이면 된다.
0b11010101에서 1101, 0101로 나눌 수 있고 이를 이으면 0xD5가 된다.
0과 1로 문자를 표현하는 방법
컴퓨터가 인식하고 표현할 수 있는 문자 모음을 문자집합이라한다.
문자집합에 속한 문자를 이진법으로 변환하는 과정을 문자 인코딩이라 한다.
문자 인코딩의 반대 과정을 문자 디코딩이라 한다.
아스키 코드
초창기 문자 집합 중 하나로 영어 알파벳, 아라비아 숫자, 일부 특수문자를 포함한다.
아스키 문자들은 7비트로 표현되는데 그래서 총 표현 가능한 문자는 128개의 문자를 표현할 수 있다.
8비트를 사용하는 확장 아스키가 나왔지만 256개는 부족하여 EUC-KR이 등장했다.
사실 아스키 코드는 8비트를 사용한다.
실제로는 아스키 문자들은 8비트를 사용하지만 1비트는 패러리 비트라고 불리는 오류 검출 비트라 실질적으로 문자 표현을 위해 사용되는 비트는 7비트 이다.
EUC-KR
완성형 인코딩 : 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식
조합형 인코딩 : 초성, 중성, 종성의 비트열을 각각 할당하여 그것들의 조합으로 하나의 글자 코드를 완성하는 인코딩 방식
EUC-KR은 대표적인 완성형 인코딩 방식이다. 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여한다.
그래서 한글 한 글자를 표현하려면 16비트가 필요하다. 하지만 이 인코딩 방식도 모든 글자를 표현할 수 없다.
유니코드와 UTF-8
유니코드 문자 집합은 EUC-KR보다 더 다양한 한글을 포함하며 대부분의 나라의 문자, 특수문자, 화살표, 이모티콘까지도 코드로 표현할 수 있는 통일된 문자 집합이다.
유니코드의 인코딩 방법에는 UTF-8, UTF-16, UTF-32 등이 있다.
대중적인 UTF-8은 1바이트부터 4바이트까지 인코딩 결과를 만들어 낸다.
첫 코드 포인트와 마지막 코드 포인트의 범위에 따라 1바이트부터 4바이트까지 될 수 있다.
예를 들어 한글이라는 문자에서 한에 부여된 값은 D55C, 글은 AE00이다.
두개는 0800와 FFFF사이에 있기 때문에 한글을 인코딩 하면 3바이트로 표현될 것을 예상할 수 있다.
참고) 혼자 공부하는 컴퓨터 구조+운영체제
'공부 > 컴퓨터구조, 운영체제' 카테고리의 다른 글
6장 메모리와 캐시 메모리 (0) | 2023.03.23 |
---|---|
5장 CPU 성능 향상 기법 (0) | 2023.03.23 |
4장 CPU의 작동 원리 (0) | 2023.03.23 |
3장 명령어 (0) | 2023.03.20 |
1장 컴퓨터 구조 시작하기 (0) | 2023.03.13 |