Chapter 02 데이터
02-1 0과 1로 숫자를 표현하는 방법
1. 정보 단위
1kB는 1,024byte, 1MB는 1,024kB는 잘못된 관습이다. 이전 단위를 1,024개 묶어 표현한 단위는 KiB, MiB, GiB, Tib이다.
① 비트(bit)
-컴퓨터가 이해하는 가장 작은 정보 단위(0,1)
-n비트는 총 2^n가지 정보를 표현할 수 있다.
② 바이트(byte)
-1비트를 8개 묶은 단위
-1바이트=8비트=2^8=256개의 정보
③ 킬로바이트(kB; kilobyte)
-1바이트를 1,000개 묶은 단위
④ 메가바이트(mB; megabyte)
-1킬로바이트를 1,000개 묶은 단위
⑤ 기가바이트(GB; gigabyte)
-1메가바이트를 1,000개 묶은 단위
⑥ 테라바이트(TB; terabyte)
-1기가바이트를 1,000개 묶은 단위
+ 워드(word)
-CPU가 한 번에 처리할 수 있는 데이터 크기, CPU마다 다르다.
-하프 워드(half word) : 정의된 워드의 절반 크기
-풀 워드(full word) : 정의된 워드의 1배 크기
-더블 워드(double word) : 정의된 워드의 2배 크기
2. 이진법
십진수 | 이진수 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
▲십진수와 이진수를 비교한 표
① 십진법(decimal) (우리가 일상적으로 사용하는 방법)
-숫자가 9를 넘어가는 시점에 자리 올림을 하여 0~9의 10개의 숫자를 사용하여 모든 수를 표현하는 방법
-십진수: 십진법으로 표현한 수
② 이진법(binary)
-십진수와의 표기 혼동을 방지하기 위하여 이진수 끝에 아래첨자 ₍₂₎를 붙이거나 이진수 앞에 0b를 붙인다
ex) 십진수 5를 이진수로 표기 : 101₍₂₎ 혹은 0b101
-숫자가 1을 넘어가는 시점에 자리 올림을 하여 0과 1 2개의 숫자를 사용하여 모든 수를 표현하는 방법
-표기를 읽을 때 1은 '일'로, 0은 '영'으로 읽는다. (ex: 110 '일일영')
-이진수 : 이진법으로 표현한 수
②-1 2의 보수(two's complement) (이진수의 음수표현)
-사전적 의미 : 어떤 수를 그보다 큰 2^n에서 뺀 값
ex) 111₍₂₎보다 큰 2^n=1000₍₂₎, 1000₍₂₎-111₍₂₎=0001₍₂₎, 따라서 111₍₂₎을 음수로 표현한 값 0001₍₂₎
-쉽게 하는 방법 : 모든 0과 1을 뒤집고, 거기에 1을 더한 값
-2의 보수를 2번 구하게 되면 자기 자신이 된다. -(-A)=A
-플래그(flag) : 이진수가 양수인지, 음수인지를 알 수 있는 부가 정보
이진수 0100₍₂₎만 보고 양수 5인지, 음수 -2인지 알 수 없다. 이러한 문제를 해결하기 위한 것이 플래그이다.
-2의 보수 표현의 한계
경우 | 과정 | 비고 |
0을 음수로 표현하기 | 0000 > 1111 > 10000 | 자리 올림이 발생한 비트의 1을 버린다. |
2^2을 음수로 표현하기 | 100 > 011 > 100 | 2^n이 2의 보수를 취하면 자기 자신이 되는 문제는 해결하기 어렵다. 따라서, n비트로는 -2^n과 2^n이라는 수를 동시에 표현할 수 없다. |
3. 십육진법
① 십육진법(hexadecimal)
-숫자가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방식
십진수 | 0~9 | 10 | 11 | 12 | 13 | 14 | 15 |
십육진수 | 0~9는 십진수와 동일 | A | B | C | D | E | F |
-십육진수 끝에 아래첨자 ₍₁₆₎을 붙이거나(주로 수학적 표현에서 사용), 십육진수 앞에 0x를 붙여서(주로 코드상 표현에서 사용) 구분한다.
-이진수와의 호환성이 좋아서 많이 사용된다.
①-1 십육진수를 이진수로 변환하기
-십육진수의 한 글자당 16 종류의 숫자를 표현할 수 있다. → 한 글자당 2^4(16)이므로 4비트가 필요하다.
-따라서, 16진수 한 글자를 4비트의 이진수로 보고 한 글자를 4비트로 구성된 이진수로 변환한다.
1A2B₍₁₆₎ | |||
1₍₁₆₎ | A₍₁₆₎ | 2₍₁₆₎ | B₍₁₆₎ |
0001₍₂₎ | 1010₍₂₎ | 0010₍₂₎ | 1011₍₂₎ |
0001101000101011₍₂₎ |
▲예시 (십육진수의 이진수 변환)
①-2 이진수를 십육진수로 변환하기
-2진수 숫자를 오른쪽부터 네 개씩 끊고, 끊어준 네 개의 숫자를 하나의 십육진수로 변환한 뒤 그대로 이어 붙인다.
(만약, 자릿수가 안 채워진다면 앞에 0을 필요한 만큼 추가한다. 0은 영향을 안 끼치기 때문이다.)
11010101₍₂₎ | |
1101₍₂₎ | 0101₍₂₎ |
D₍₁₆₎ | 5₍₁₆₎ |
D5₍₁₆₎ |
▲예시 1 (이진수의 십육진수 변환)
111011 | |
0011 | 1011 |
3 | B |
3B |
▲예시 2(자릿수가 안 채워졌을 때, 0이 추가된 것을 확인할 수 있다.)
이진수와 십육진수 변환은 자주 사용하기도 하고, 시험 문제에서도 자주 나와서 빠르게 정확하게 할 수 있으면 좋다.
(모든 능력이 있으면 좋듯...)
직접 문제를 출제하고 진법 변환기에서 답을 확인하면서 연습하면 좋다.
(진법 변환기는 구글에 검색하면 나온다.)
확인문제
1. 2
2. ④
(기본미션)3. 0010, 0011, 0011₍₂₎
4. 11011010, 11011010₍₂₎
5. ①
02-2 0과 1로 문자를 표현하는 방법
1. 문자 집합과 인코딩
① 문자 집합(character set)
-컴퓨터가 인식하고 표현할 수 있는 문자의 모음
ex) 문자 집합이 {h, e, l, o}라면 컴퓨터는 문자 집합 내의 4개의 문자는 이해할 수 있으나, 그 외의 a 등의 문자는 이해하지 못한다.
② 문자 인코딩(character encoding)
-문자를 0과 1로 이루어진 문자 코드로 변환하는 과정
-같은 문자 집합에 대해서 다양한 인코딩 방법이 있을 수 있다.
+)코드 포인트(code point) : 글자에 부여된 고유한 값
③ 문자 디코딩(character decoding)
-0과 1로 이루어진 문자 코드를 사람이 이해할 수 있는 문자로 변환하는 과정
2. 아스키 코드
① 아스키(ASCII; American Standard Code for Information Interchange)
-초창기 문자 집합 중 하나로 영어 알파벳, 아라비아 숫자, 일부 특수 문자를 포함한다.
-아스키 표는 위키 및 인터넷을 참고하자.
https://ko.wikipedia.org/wiki/ASCII
② 아스키 문자
-아스키 문자 집합에 속한 문자 (Backspace, Excape, Cancel, Space와 같은 제어 문자 또한 포함되어 있다.)
-실질적으로 문자 표현을 위해 사용되는 비트는 7비트이다. 따라서, 2^7=128개의 문자를 표현할 수 있다.
+)실제로 하나의 아스키 문자는 8비트(1바이트)를 사용하나, 1비트는 오류 검출을 위해 사용되는 패리티 비트(parity bit)로 사용된다.
③ 아스키 코드
-아스키 문자에 대응된 고유한 수, 아스키 문자는 아스키 코드로 인코딩한다.
ex) A의 아스키 코드: 65
-아스키 코드를 이진수로 표현하면 문자를 0과 1로 표현할 수 있다.
ex) A는 십진수 65, 2진수 1000001₍₂₎로 인코딩된다.
-장점 : 인코딩이 간단하다.
-단점 : 아스키 문자 집합 외의 문자, 특수문자를 표현할 수 없다.
④ 확장 아스키
-실질적으로 문자 표현을 위해 사용되는 비트를 1비트 추가하여 8비트로, 256개의 문자만을 표현할 수 있다.
3. EUC-KR
① 완성형 인코딩
-완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식
ex) 강-11101010 10110000 10010101
② 조합형 인코딩
-초성, 중성, 종성을 위한 각각의 비트열을 할당하여 그것들의 조합으로 하나의 글자 코드를 완성하는 인코딩 방식
ex) ㄱ-0010, ㅏ-0011, ㅇ-0001 00011 → 강-0010 0011 0001 00011
③ EUC-KR
-KS X 1001, KS X 1003이라는 문자 집합을 기반으로 하는 완성형 인코딩 방식
-초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드(네 자리 16진수로 표현 가능하다)를 부여한다.
-그러나 모든 한글을 표현할 수 있는 것은 아니다.
④ CP949(Code Page 949)
-EUC-KR의 확장된 버전
-그러나 이 방식도 모든 한글을 표현할 수 있지는 않다.
4. 유니코드와 UTF-8
① 유니코드(unicode)
-여러 나라의 문자를 광범위하게 표현할 수 있는 통일된 문자 집합
학교에서 배울 때 교수님께서 세상 모든 글자에 코드를 부여해서 관리하려는 게 유니코드의 목표라고, 미친 체계라고 언급하셨던 게 기억난다.
-한글 유니코드 표는 여기서 확인할 수 있다.
http://www.unicode.org/charts/PDF/UAC00.pdf
-다양한 문자의 유니코드 표는 여기서 확인할 수 있다.
http://www.unicode.org/charts/
② UTF-8
-유니코드는 글자에 부여된 값을 인코딩된 값으로 보지 않고 다양한 인코딩 방법을 취한다. 이를 위한 것이 UTF-8, UTF-15, UTF-16이며, 가장 대표적인 것이 UTF-8이다.
가장 쉽게 UTF-8을 경험해 볼 수 있는 곳은 윈도우즈의 메모장
-통상 1~4바이트(이 결과는 유니코드 문자에 부여된 값의 범위에 따라 달라진다)의 인코딩 결과를 만들어내는 인코딩 방식
유니코드의 첫 코드 포인트 | 유니코드의 마지막 코드 포인트 | 1바이트 | 2바이트 | 3바이트 | 4바이트 |
0000 | 007F | 0XXXXXXX | - | - | - |
0080 | 07FF | 110XXXXX | 10XXXXXX | - | - |
0800 | FFFF | 1110XXXX | 10XXXXXX | 10XXXXXX | - |
10000 | 10FFFF | 11110XXX | 10XXXXXX | 10XXXXXX | 10XXXXXX |
▲X자에 유니코드를 이진수로 변환한 값이 들어간다.
ex) 신인형을 UTF-8로 나타내기
글자 | 신 | 인 | 형 |
유니코드 | C2E0₍₁₆₎ | C778₍₁₆₎ | D615₍₁₆₎ |
이진수 변환 | 1100001011100000₍₂₎ | 1100011101111000₍₂₎ | 1101011000010101₍₂₎ |
UTF-8 | 11101100 10001011 10100000 | 11101100 10011101 10111000 | 11101101 10011000 10010101 |
확인문제
1. hongong
2. ②
3. 11101100 10010101 10001000 11101011 10000101 10010101
글자 | 안 | 녕 |
유니코드 | C548₍₁₆₎ | B155₍₁₆₎ |
이진수 변환 | 1100010101001000₍₂₎ |
1011000101010101₍₂₎ |
UTF-8 | 11101100 10010101 10001000 | 11101011 10000101 10010101 |
'혼자 공부하는 컴구, 운체' 카테고리의 다른 글
[3주차] Chapter 06. RAM, 메모리 주소, 캐시 메모리 (0) | 2023.07.23 |
---|---|
[2주차] Chapter 05. 클럭, 멀티코어, 멀티스레드, 명령어 병렬 처리 기법, CISC, RISC (0) | 2023.07.16 |
[2주차] Chapter 04. ALU, 제어장치, 레지스터, 명령어 사이클, 인터럽트 (0) | 2023.07.16 |
[1주차] Chapter 03. 소스 코드, 명령어, 명령어 구조 (0) | 2023.07.09 |
[1주차] Chapter 01. 컴퓨터 구조, 데이터, 명령어 (0) | 2023.07.09 |