본문 바로가기

혼자 공부하는 컴구, 운체

[1주차] Chapter 02. 이진법, 십육진법, 아스키코드, 유니코드

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
 

ASCII - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문

ko.wikipedia.org

 

아스키 문자

 -아스키 문자 집합에 속한 문자 (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/
 

Unicode 15.0 Character Code Charts

Unicode 15.0 Character Code Charts Scripts   |   Symbols & Punctuation   |   Name Index Find chart by hex code:           Help    Conventions    Terms of Use Notational Systems Braille Patterns Musical Symbols Ancient Greek Musical Nota

www.unicode.org

 

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