공부 기록일지

유성이의 공부일지(2) - 혼자공부하는 컴퓨터 구조 + 운영체제 2장

메테오유성 2024. 7. 1. 20:17

02 - 1. 0과 1로 숫자를 표현하는 방법

정보단위

- 컴퓨터는 0 또는 1밖에 이해하지 못함

- 0과 1을 나타내는 가장 작은 정보 단위를 비트라고 함

- 예를 들어 전구 한개로 꺼짐 또는 켜짐 두 가지 상태를 표현할 수 있듯이, 1비트는 0 또는 1, 두가지 정보를 표현 가능

- 프로그램 크기를 말하는 단위에는 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트 등이 있음

- CPU가 한 번에 처리할 수 있는 데이터 크기를 워드라고 함

- 이렇게 정의된 워드의 절반 크기를 하프 워드, 1배 크기를 풀 워드, 2배 크기를 더블 워드라고 함

 

바이트(byte)

- 여덟 개의 비트를 묶은 단위

- 비트 보다 한 단계 더 큰 단위

- 1바이트 = 8비트, 2의8승 (256)개의 정보 표현 가능

 

킬로바이트(kilobyte)

- 1바이트 1000개를 묶은 단위

 

메가바이트(megabyte)

- 1킬로바이트 1000개를 묶은 단위

 

기가바이트(gigabyte)

- 1메가바이트 1000개를 묶은 단위

 

테라바이트(terabyte)

- 1기가바이트 1000개를 묶은 단위

 

이진법

- 수학에서 0과 1만으로 모든 숫자를 표현하는 방법을 이진법이라고 함

- 이진법을 이용하면 1보다 큰 수도 0과 1만으로 표현 가능

- 숫자가 9를 넘어가는 시점에 자리 올림을 하여 0부터 9까지, 열개의 숫자만으로 모든 수를 사용하는 방법을 십진법이라고 함

- 이진법으로 표현한 후를 이진수, 십진법으로 표현한 수를 십진수라고 함

 

추가로!!

- 예를 들어 숫자 10만 보고 이게 십진수인지 이진수인지 구분하기가 어려움

- 숫자 10를 십진수로 읽으면 10이지만, 이진수로 읽으면 2임

- 이처럼 숫자만으로는 이 수가 어떤 진법으로 표현된 수인지 알 수 없음

- 이런 혼동을 예방하기 위해 이진수 끝에 아래첨자(2)를 붙이거나 이진수 앞에 0b를 붙임

 

이진수의 음수 표현

- 십진수 음수를 표현하기 위해서는 단순히 숫자 앞에 마이너스 부호를 붙이면 됨

- 하지만 이진수에는 마이너스를 붙이면 컴퓨터에서는 인식 못함x

- 그렇기에 마이너스 부호를 사용하지 않고 0과 1만으로 음수를 표현해야 함

- 0과 1만으로 음수를 표현하는 방법 중 가장 널리 사용되는 방법은 2의 보수를 구해 이 값을 음수로 간주하는 방법임

- 2의 보수의 사전적 의미는 어떤 수를 그보다 큰 2n에서 뺀 값을 의미함

- 예를 들어 11(2)의 2의 보수는 11(2)보다 큰 2n, 즉 100(2) - 11(2) = 01(2)의 값이 나옴

- 2의 보수를 쉽게 설명하자면 모든 0과 1을 뒤집고, 거기에 1을 더한 값으로 이해하면 됨

- 컴퓨터 내부에서 어떤 수를 다룰 때 양수인지 음수인지를 구분하기 위해 플래그를 사용함

 

십육진법

- 수가 15를 넘어가는 시점에 자리올림을 하는 숫자 표현방식

- 십진수 10,11,12,13,14,15를 십육진수로는 A,B,C,D,E,F로 표기함

- 십육진수도 이진수와 마찬가지로 숫자 뒤에 아래첨자(16)을 붙이거나, 숫자 앞에 0x를 붙여 구분함

- 15(16) - 수학적 표기 방식, 0x15 - 코드상 표기 방식

 

십육진수를 이진수로 변환하기

ex)  1A2B(16) = 1A2B(2)

1 = 0001

A = 1010

2 = 0010

B = 1011

즉 0001 1010 0010 1011(2)이 1A2B를 이진수로 표현한 값

 

이진수를 십육진수로 변환하기

ex) 11010101(2)

1101(2)

0101(2)

D(2)

5(2)

즉 11010101(2) = D5(16)

 

02 - 1. 0과 1로 문자를 표현하는 방법

문자 집합과 인코딩

- 컴퓨터가 인식하고 표현할 수 있는 문자의 모음을 문자 집합이라고 함

- 컴퓨터는 문자 집합에 속해 있는 문자를 이해할 수 있고, 반대로 문자 집합에 속해 있지 않는 문자는 이해 x

- 예를 들어 문자 집합이 {a,b,c,d,e}인 경우, 5개의 문자만 이해 가능

- 문자를 0과 1로 변환해서 컴퓨터가 이해할 수 있도록 하는 과정을 문자 인코딩이라고 함

- 0과 1로 이루어진 문자 코드를 사람이 이해 할 수 있도록 하는 과정을 문자 디코딩이라고 함

 

아스키 코드

- 초창기 문자 집합 중 하나로, 영어 알파벳과 아라비아 숫자 그리고 일부 특수 문자를 포함함

- 아스키 문자 집합에 속한 문자들은 각각 7비트로 표현되는데, 7비트로 표현할 수 있는 정보의 거짓수는 2의 7개로 총 128개의 문자를 표현 가능

- 실제로는 하나의 아스키 문자를 나타내기 위해 8비트(1바이트를 사용함)

- 하지만 8비트 중 1비트는 패리티 비트임

- 패리티 비트는 오류 검출을 위해 사용되는 비트이기에 실질적으로 문자 표현을 하기 위해 사용되는 비트는 7비트임

- 아스키 문자에 대응된 고유의 수를 아스키 코드라고 함

- 아스키 코드를 이진수로 표현함으로써 아스키 문자를 0과 1로 표현가능 o

- 문자 인코딩에서 글자에 부여된 고유의 값을 코드 포인트라고 함

- 예를 들어 A의 코드 포인트는 65임

- 확장 아스키란 다양한 문자 표현을 위해 아스키 코드에 1비트를 추가한것

 

EUC-KR

- 한글 인코딩에는 두 가지 방식, 완성형(한글 완성형 인코딩)조합형(한글 조합령 인코딩)이 존재함

- 완성형 인코딩은 초성 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 인코딩 방식

- 예를 들어 가는 1, 나는 2, 다는 3

- 조합형 인코딩은 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위하 비트열을 할당하여 그것들의 조합으로 하나의 글자를 완성해 가는 방식

- EUC-KR은 KS X1001, KS X 1003이라는 문자 집합을 기반으로 하는 대표적인 완성형 인코딩 방식

- 즉 EUC-KR 인코딩은 초성 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여함

- EUC-KR로 인코딩된 한글은 네 자리 십육진수로 나타낼 수 있음

- CP949 버전은 EUC-KR 방식으로 표현할 수 없는 것을 해결하기 위해 마이크로소프트에서 만듦

 

유니코드와 UTF-8

- 유니코드는 EUC-KR보다 훨씬 다양한 한글을 포함하여 대부분 나라의 문자, 특수문자, 화살표나 이모티콘까지도 코드로 표현가능한 통일된 문자 집합임

- 현대 문자를 표현할 때 가장 많이 사용되는 표준 문자 집합이며, 인코딩 세계에서 매우 중요한 역할을 맡고 있음

- 유니코드 문자 집합에서는 아스키 코드나 EUC-KR과 같이 고유한 값이 부여됨

- 예를 들어 한에 부여된 값은 D55C(16), 글에 부여된 값은 AE00(16)임

- 유니코드 앞에 U+라는 문자열이 붙으면 이는 십육진수로 유니코드를 표현할때 사용하는 표기임

- 글자에 부여된 값 자체를 인코딩된 값으로 삼지 않고 다양한 방법으로 인코딩 하는 UTF-8, UTF-16, UTF-32가 있음

- 이는 유니코드 문자에 부여된 값을 인코딩 하는 방식

- UTF-8은 통상 1바이트부터 4바이트까지의 인코딩 결과를 만들어 냄

 

- 유니코드 문자에 부여된 값의 범위가 0부터 007F(16)까지는 1바이트로 표현

- 유니코드 문자에 부여된 값의 범위가 0080(16)부터 07FF(16)까지는 2바이트로 표현

- 유니코드 문자에 부여된 값의 범위가 0080(16)부터 FFFF(16)까지는 3바이트로 표현

- 유니코드 문자에 부여된 값의 범위가 10000(16부터 10FFFF(16)까지는 4바이트로 표현

 

그렇다면 한글은 몇 바이트로 구성될까?

한 = D55C(16)

글 = AE00(16) 

두 글자 모두 0800(16)와 FFFF(16) 사이에 있기에 인코딩하면 3바이트로 표현되는 것을 예상할 수 있음

 

- 여기서 붉은색 x표가 있는 곳에 유니코드 문자에 부여한 고유의 값이 들어감

- 한 과 글에 부여된 값은 D55C(16), AE00(16)

- 이는 각각 이진수로 1101 0101 0101 1100(2), 1010 1110 0000 0000(2)임

- 한 과 글을 UTF-8의 방식으로 인코딩한 결과

11101101 10010101 10011100(2)

11101010 10111000 1000000(2)